【linux c】子进程结束了,父进程还在,用ps -ef查看,子进程变成僵尸进程了。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【linux c】子进程结束了,父进程还在,用ps -ef查看,子进程变成僵尸进程了。相关的知识,希望对你有一定的参考价值。

【linux c】子进程结束了,父进程还在,用ps -ef查看,可以看到子进程变成僵尸进程了。但是如果在父进程使用wait的话,等待子进程结束后,用ps -ef查看,就只剩下父进程了。这是什么原因呢。是不是说不使用wait的情况下,父进程不主动去回收子进程的资源呢?

对的,不使用wait的情况下,父进程不主动去回收子进程的资源。一个子进程在其父进程还没有调用wait()或waitpid()的情况下退出。这个子进程就是僵尸进程。产生僵尸进程的原因:
1、子进程结束后向父进程发出SIGCHLD信号,父进程默认忽略了它
2、父进程没有调用wait()或waitpid()函数来等待子进程的结束
参考技术A 父进程里没有回收子进程,具体函数好像是wait还是exit来着

进程管理

僵尸进程:

每个进程结束以后会释放所占用的资源,但是还是会保留少许的状态资源以供其父进程查看子进程曾经运行时候状态。

一旦父进程通过wait()或者waitpid()检查了子进程曾经运行的状态,内核就会释放子进程占用的资源。

如果子进程已经结束运行,但是父进程还在运行。则这个时候子进程就会变为僵尸进程。

如果父进程没有等待查看子进程状态,然后结束运行。子进程的父进程就会被设置为init进程,init进程会查看其子进程如果有僵尸进程则会释放。

或者父进程比子进程更早结束,也是如此。

 

进程的实际用户ID:

实际运行进程的用户ID。

进程的有效用户ID:

当前进程所使用的的用户ID,权限认证用的是这个ID。程序运行过程中可以通过setuid()改变这个有效用户ID。

 

以上是关于【linux c】子进程结束了,父进程还在,用ps -ef查看,子进程变成僵尸进程了。的主要内容,如果未能解决你的问题,请参考以下文章

孤儿进程和僵尸进程

Linux练习_进程间信号练习

进程管理

Linux提高:僵尸进程

Linux提高:僵尸进程

僵尸进程孤儿进程