满洲里网站制作,如何说课网站建设,移动端网站开发哪家好,有名网站建设公司本文参考自#xff1a;https://baike.baidu.com/item/%E5%83%B5%E5%B0%B8%E8%BF%9B%E7%A8%8B/1036577?fraladdin 一个进程在调用exit命令结束自己的生命的时候#xff0c;其实它并没有真正的被销毁#xff0c;而是留下一个称为僵尸进程#xff08;Zombie#xff09;的数据… 本文参考自https://baike.baidu.com/item/%E5%83%B5%E5%B0%B8%E8%BF%9B%E7%A8%8B/1036577?fraladdin 一个进程在调用exit命令结束自己的生命的时候其实它并没有真正的被销毁而是留下一个称为僵尸进程Zombie的数据结构系统调用exit它的作用是使进程退出但也仅仅限于将一个正常的进程变成一个僵尸进程并不能将其完全销毁。在Linux进程的状态中僵尸进程是非常特殊的一种它已经放弃了几乎所有内存空间没有任何可执行代码也不能被调度仅仅在进程列表中保留一个位置记载该进程的退出状态等信息供其他进程收集除此之外僵尸进程不再占有任何内存空间。它需要它的父进程来 为它收尸如果他的父进程没安装SIGCHLD信号处理函数调用wait或waitpid()等待子进程结束又没有显式忽略该信号那么它就一直保持僵 尸状态如果这时父进程结束了那么init进程自动会接手这个子进程为它收尸它还是能被清除的。但是如果父进程是一个循环不会结束那么子进程就 会一直保持僵尸状态这就是为什么系统中有时会有很多的僵尸进程。 怎样来清除僵尸进程 1.改写父进程 在子进程死后要为它收尸。具体做法是接管SIGCHLD信号。子进程死后会发送SIGCHLD信号给父进程父进程收到此信号后执行 waitpid()函数为子进程收尸。这是基于这样的原理就算父进程没有调用wait内核也会向它发送SIGCHLD消息尽管对的默认处理是忽略 如果想响应这个消息可以设置一个处理函数。 2.把父进程杀掉。父进程死后僵尸进程成为孤儿进程过继给1号进程initinit始终会负责清理僵尸进程它产生的所有僵尸进程也跟着消失。 参考文档那边写了很多种情况其中我的解决办法是以下这种
在SVR4UNIX操作系统的一种内核标准中如果调用signal或sigset将SIGCHLD的配置设置为忽略,则不会产生僵死子进程。另外,使用SVR4版的sigaction,则可设置SA_NOCLDWAIT标志以避免子进程僵死。 Linux中也可使用这个在一个程序的开始调用这个函数 signal(SIGCHLD,SIG_IGN);
ps:这个是在韦东山视频(网络编程)里面学的