最近,写了一个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