首先说简单的结论:没有父进程的进程就是孤儿进程,孤儿进程会被init领养,成为一个准守护进程。如果进程他爹活着,但是不给子进程收尸(wait、waitpid),子进程就会变成僵尸。守护进程(Daemon)是在一类脱离终端在后台执行的程序,通常以d结尾,随系统启动,其父进程(ppid)通常..
分类:
系统相关 时间:
2016-05-27 18:38:17
阅读次数:
247
在创建进程后,为了避免僵尸进程,资源的浪费和进程数量的空闲占据,则需要对进程资源进行回收,这里主要看看wait和waitpid两个进程的功能与区别!!
一、pid_t wait(int *status)
作用(1):清理结束的子进程资源或者得到进程执行后的返回信息;
进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出(主要是回收资源),如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找...
分类:
其他好文 时间:
2016-05-13 04:11:09
阅读次数:
271
以前一直对僵尸进程和孤儿进程都没怎么理解,真是罪过,最近在看liunx编程设计(第四版),看到了他们的概念,所以对它们做个总结!加深印象。
基本概念:
我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程再创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。
但是如果情况...
分类:
系统相关 时间:
2016-05-13 03:02:11
阅读次数:
310
1.关于SIGCHLD信号wait和waitpid函数清理僵尸进程,父进程可以阻塞等待子进程结束,也可以阻塞地查询是否有进程结束等待清理(也就是轮询的方式)。采用第一种方式,父进程阻塞就不能处理自己的工作了。采用第二种方式,父进程在处理自己的工作时还记得时不时轮询一下,程序实现..
分类:
其他好文 时间:
2016-05-07 16:50:36
阅读次数:
501
代码如下: 输出如下: 现在才知道系统的system函数为我们做了那么多的处理。 ...
分类:
系统相关 时间:
2016-04-08 19:43:29
阅读次数:
266
之前在学习wait和waitpid函数的时候,就对使用宏WIFEXITED来检查获取的进程终止状态产生过疑惑:一般我们在程序中是调用的exit或者_exit函数来退出的,那么wait和waitpid函数获取的终止状态直接就是我们传递给exit的参数不就OK了吗? 后来了解到是我考虑简单了,因为程序退 ...
分类:
其他好文 时间:
2016-04-01 14:49:22
阅读次数:
253
僵尸进程概念 僵尸进程(Zombie process)通俗来说指那些虽然已经终止的进程,但仍然保留一些信息,等待其父进程为其收尸. 书面形式一点:一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程。通过ps命令查看其带有defunct的标志。僵尸进... ...
分类:
系统相关 时间:
2016-04-01 00:55:30
阅读次数:
305
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进..
分类:
系统相关 时间:
2016-03-28 19:02:11
阅读次数:
228
背景:在读unix网络编程卷1, 第五章服务器处理SIGCHLD信号时。及多个客户端同时关闭socket连接,服务端主进程的多个子进程几乎同时结束。 使用wait 的情况: 当服务端采用并发处理客户端的请求时,客户进程关闭连接,服务端子进程几乎同时结束,信号处理函数在使用wait时,并不能完全的防止 ...
分类:
系统相关 时间:
2016-03-24 19:56:16
阅读次数:
239
服务器端避免僵尸进程的方法: 1)通过忽略SIGCHLD信号,解决僵尸进程 signal(SIGCHLD, SIG_IGN) 2)通过wait方法,解决僵尸进程 signal(SIGCHLD, handle_sigchld); wait(NULL) 3)通过waitpid方法,解决僵尸进程 sign
分类:
系统相关 时间:
2016-03-07 20:46:30
阅读次数:
244