C++ 进程相关

PCB 进程控制块

C++ 进程相关

 

 

getenv 获取环境变量
C++ 进程相关

 

 

 

C++ 进程相关

 

 C++ 进程相关

 

 C++ 进程相关

 

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

 

C++ 进程相关

 

 加sleep,让父进程最后死。

C++ 进程相关

 

 

查看进程信息:

ps aux

有ppid信息:

ps ajx

杀死进程:

kill -9 pid

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

kill -l 查看信号信息

 

生5个子进程

C++ 进程相关

 

 

精确控制失去几号子进程

C++ 进程相关

 

 

 

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

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

C++ 进程相关

 

 C++ 进程相关

 

 

C++ 进程相关

 

C++ 进程相关

 

 

 

execl execlp

C++ 进程相关

 

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

C++ 进程相关

 

 C++ 进程相关

 

 

execl 需要加路径

C++ 进程相关

 

 

 

 

C++ 进程相关

 

 孤儿进程

C++ 进程相关

 

 C++ 进程相关

 

 

僵尸

C++ 进程相关

 

 C++ 进程相关

 

 C++ 进程相关

 

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

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

 

 

wait 函数

C++ 进程相关

 

 C++ 进程相关

 

 C++ 进程相关

 

C++ 进程相关

 

 

C++ 进程相关

 

 C++ 进程相关
C++ 进程相关

 

 

C++ 进程相关

 

 C++ 进程相关

C++ 进程相关

 

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

 

C++ 进程相关

 

 (可以回收到)

 

C++ 进程相关

 

 C++ 进程相关

 

 

 

回收n个子进程

C++ 进程相关

 

 

用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 fathern");
        while(1){
            pid_t wpid=waitpid(-1,NULL,WNOHANG);
            if(wpid==-1){
                break;
            }else if(wpid>0){
                printf("recycle wpid=%dn", wpid);
            }
        }
        while(1){
            sleep(1);
        }
    }
    else if(i<5){
        sleep(i);
        printf("I am the child, i=%d, pid=%dn", i, getpid());
    }
    return 0;
}

 

原文链接: https://www.cnblogs.com/FEIIEF/p/12409998.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++ 进程相关

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/333349

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午9:08
下一篇 2023年3月1日 下午9:09

相关推荐