C++ 进程相关

PCB 进程控制块

getenv 获取环境变量

 

 

 父进程先死,子进程变为孤儿。

 加sleep,让父进程最后死。

查看进程信息:

ps aux

有ppid信息:

ps ajx

杀死进程:

kill -9 pid

kill表示给进程发信号,-9表示发9号信号

kill -l 查看信号信息

生5个子进程

精确控制失去几号子进程

父子进程间遵循读时共享,写时复制的原则,节省内存开销。

即使是全局变量,也不是共享的,读时共享,写时就复制了。

 

execl execlp

 底层把代码段替换了。进程ID不变。换核不换壳。

 

execl 需要加路径

 孤儿进程

 

僵尸

 

 

子进程已经死了,但是没有被回收,所以称为僵尸进程。

解决:杀死父进程,init会领养它,并负责回收它。

wait 函数

 

 

 

 

 (没有回收到子进程,waitpid直接return了)

 (可以回收到)

 

回收n个子进程


用waitpid实现

#include <stdio.h>
#include <unistd.h> 
#include <sys/types.h>
#include <sys/wait.h>

int main()
{
    int i=0;
    pid_t pid;
    for(i=0;i<5;i++){
        pid=fork();
        if(pid==0){
            break;
        }
    }

    if(i==5){
        printf("I am the father
");
        while(1){
            pid_t wpid=waitpid(-1,NULL,WNOHANG);
            if(wpid==-1){
                break;
            }else if(wpid>0){
                printf("recycle wpid=%d
", wpid);
            }
        }
        while(1){
            sleep(1);
        }
    }
    else if(i<5){
        sleep(i);
        printf("I am the child, i=%d, pid=%d
", i, getpid());
    }
    return 0;
}
原文地址:https://www.cnblogs.com/FEIIEF/p/12409998.html