当前位置: 技术问答>linux和unix
关于僵死进程
来源: 互联网 发布时间:2016-03-07
本文导语: 我的程序是长时间运行的程序,主循环用了while(1)循环。程序运行在arm-linux环境下。 开机自动运行,在/etc/init.d/rc.sysinit中最后一行调用我的程序/tmdt/xxxx 那么问题就出来了,用ps查看进程,发现会有名为sh的僵死...
我的程序是长时间运行的程序,主循环用了while(1)循环。程序运行在arm-linux环境下。
开机自动运行,在/etc/init.d/rc.sysinit中最后一行调用我的程序/tmdt/xxxx
那么问题就出来了,用ps查看进程,发现会有名为sh的僵死进程。对我的程序的影响是:在程序中启动bftpd服务,然后用kill方式结束bftpd进程的时候,会出现两个名为bfptd的僵死进程,导致结束进程失败,程序不能继续执行。
后来将/etc/init.d/rc.sysinit中的调用语句改为/tmdt/xxxx& ,让程序在后台运行,则这些僵死进程就没有了,程序也运行正常。但是程序的屏幕输出都没有了,因为是后台运行。
虽然问题解决了,但不能显示输出也是美中不足。而且对于这个现象我还不清楚原因,请高手指点指点,不胜感激!
此致:回贴者2008顺利!幸福!开心!
开机自动运行,在/etc/init.d/rc.sysinit中最后一行调用我的程序/tmdt/xxxx
那么问题就出来了,用ps查看进程,发现会有名为sh的僵死进程。对我的程序的影响是:在程序中启动bftpd服务,然后用kill方式结束bftpd进程的时候,会出现两个名为bfptd的僵死进程,导致结束进程失败,程序不能继续执行。
后来将/etc/init.d/rc.sysinit中的调用语句改为/tmdt/xxxx& ,让程序在后台运行,则这些僵死进程就没有了,程序也运行正常。但是程序的屏幕输出都没有了,因为是后台运行。
虽然问题解决了,但不能显示输出也是美中不足。而且对于这个现象我还不清楚原因,请高手指点指点,不胜感激!
此致:回贴者2008顺利!幸福!开心!
|
难道楼主用的是printf输出?作为一个后台运行的服务端,肯定要用文件作为输出的,一个例子:
#define myprintf(fmt,arg...)
do{
fprintf(eventlog, fmt, ##arg);
fflush(eventlog);
}while (0)
另外/etc/init.d中的启动脚本本来就有一个原则,就是不能让他们阻塞,通常服务端都是要加&让他们后台执行的
|
system("/tmdt/bftpd -c /tmdt/bftpd.conf -d");
参数 -d 是不是 debug 模式,是否应该去掉,或者使用其他参数
参数 -d 是不是 debug 模式,是否应该去掉,或者使用其他参数
|
可以试试下面的方法:
7.处理SIGCHLD信号。SIGCHLD信号是子进程结束时,向内核发送的信号。
如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源。因此需要对SIGCHLD信号做出处理,回收僵尸进程的资源,避免造成不必要的资源浪费。可以用如下语句:
signal(SIGCHLD,(void *)reap_status);
捕捉信号SIGCHLD,用下面的函数进行处理:
void reap_status()
{ int pid;
union wait status;
while ((pid = wait3(&status,WNOHANG,NULL)) > 0)
…… }
来自:
http://bjcert.beijingit.gov.cn/cenep/portal/user/anon/page/bjtec_CMSItemInfoPage.page?appId=00000000000000000178&categoryCode=200100&metainfoId=ABC00000000000063806
7.处理SIGCHLD信号。SIGCHLD信号是子进程结束时,向内核发送的信号。
如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源。因此需要对SIGCHLD信号做出处理,回收僵尸进程的资源,避免造成不必要的资源浪费。可以用如下语句:
signal(SIGCHLD,(void *)reap_status);
捕捉信号SIGCHLD,用下面的函数进行处理:
void reap_status()
{ int pid;
union wait status;
while ((pid = wait3(&status,WNOHANG,NULL)) > 0)
…… }
来自:
http://bjcert.beijingit.gov.cn/cenep/portal/user/anon/page/bjtec_CMSItemInfoPage.page?appId=00000000000000000178&categoryCode=200100&metainfoId=ABC00000000000063806