• (14)fork函数


    fork函数:

    pid_t fork(void) 

    创建子进程。父子进程各自返回。父进程返回子进程pid。 子进程返回 0.

    getpid();getppid(); >0 父进程 =0 子进程

    循环创建N个子进程模型。 每个子进程标识自己的身份。

    父子进程相同:

    fork后。 data段、text段、堆、栈、环境变量、全局变量、宿主目录位置、进程工作目录位置、信号处理方式

    父子进程不同:

    进程id、返回值、各自的父进程、进程创建时间、闹钟、未决信号集

    父子进程共享:

    读时共享、写时复制。———————— 全局变量。

    1. 文件描述符

    2. mmap映射区。

        每个进程在内核之中都有一个进程控制块(PCB)来维护进程的相关信息,Linux内核的进程控制块是task_struct结构体。

    PCB进程控制块: 进程id,系统中每个进程都有唯一的id,C语言中使用pid_t类型表示,其实就是一个非负整数。进程的状态,有就绪,运行,挂起,停止等状态。进程切换的时候需要保存和恢复一些进程的信息。文件描述符表,包含很多指向file结构体的指针,和信号相关的信息,用户id和组id

    ps -aux :当前进程的id.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <pthread.h>
    int main(int argc, char *argv[])
    {
        int i;
        pid_t pid;
        for (i = 0; i < 5; i++) {       
            if (fork() == 0)        // 循环期间, 子进程不 fork
                break;
        }
        if (5 == i) {       // 父进程, 从 表达式 2 跳出
            sleep(5);
            printf("I'm parent 
    ");
        } else {            // 子进程, 从 break 跳出
            sleep(i);
            printf("I'm %dth child
    ", i+1);
        }
        return 0;
    }
    
    gdb调试:
    	设置父进程调试路径:set follow-fork-mode parent (默认)
    	设置子进程调试路径:set follow-fork-mode child
    

      

  • 相关阅读:
    hash
    C#执行Sql事务处理
    数据库的锁表
    页面的刷新 和图片的替换
    单点登录 Webservice
    js 动态调用js文件
    .net生成EXCEL
    JS : 连续滚动
    引用指定类型的对象
    对象序列化为字符串
  • 原文地址:https://www.cnblogs.com/love-life-insist/p/14110740.html
Copyright © 2020-2023  润新知