干掉僵尸进程

最近,写了一个pcap方面的程序,程序启动的时候,有守护进程监控,会重启;

程序本身会多线程监控所有活动的网卡,同时用俩个线程,一个做超时检查,一个做连接状况显示;

今天在替换的时候,发现有僵尸进程这种情况出现,因为内部用了大量的sleep,可能你kill主线程的时候,子线程还在休眠,造成这种现象;

现在描述一下,怎么干掉僵尸进程,从而替换程序;

1,先替换执行程序,用mv,不能用cp,cp会提示说:      cp: cannot create regular file './dev_list_server': Text file busy

2,确定僵尸进程相关信息:    ps -e -o stat,ppid,pid,cmd | egrep '^[Zz]'      

3,可能需要用这个命令:  ps -ef | grep "defunct"

4,将所有显示出来的子进程kill掉;

5,这样,守护进程重启的时候,就会启动,你已经替换过的执行程序。

网上说,我这种情况是理想情况,描述如下:

  通过结束父进程从而结束僵尸进程,这只能算是一个比较理想的情况 ,很多时候遇到僵尸进程我们不能结束父进程,比如父进程是init进程,那一旦结束父进程,整个系统就挂掉了,这时候则可以考虑挂起子进程,这相当于“曲线救国”。一个进程一旦挂起就相当于“什么都不做了”。可以通过执行如下命令来挂起进程。

kill -HUP 进程pid         向指定ID进程,发送挂起情况;

描述记录end.

原文地址:https://www.cnblogs.com/the-tops/p/7514171.html