Linux实现孤儿进程和僵尸进程 灰太狼 2022-01-28 14:59 207阅读 0赞 ## Linux实现孤儿进程和僵尸进程 ## **孤儿进程:** *子进程是通过父进程创建的,子进程再创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。当一个父进程由于正常完成工作而退出或由于其他情况被终止,它的一个或多个子进程却还在运行,那么那些子进程将成为孤儿进程。为避免孤儿进程退出时无法释放所占用的资源而僵死,进程号为1的init进程将会接受这些孤儿进程,这一过程也被称为“收养”* #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int main() { pid_t pid; pid=fork(); //如果子进程创建失败,直接返回,并打印fork函数错误 if(pid==-1) { printf("fork err\n"); return 0; } //如果是子进程让子进程死循环执行命令 if(pid==0) { while(1) { sleep(1); printf("hello world\n"); } } //父进程直接死亡 if(pid>0) { return 0; } return 0; } **僵尸进程:** *一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程。 但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程* #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <string.h> int main() { //使用fork函数复制出一个子进程 pid_t pid=fork(); //如果子进程创建失败,直接打印函数错误,返回 if(pid==-1) { printf("fork err\n"); return 0; } //如果是子进程,让子进程直接死亡 if(pid==0) { return 0; } //如果是父进程,让父进程死循环执行命令,没有时间去释放子进程的pcb if(pid>0) { while(1) { sleep(1); printf("------hello world------\n"); } } return 0; }
还没有评论,来说两句吧...