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; }