干掉僵尸进程

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

时间: 2024-10-16 22:03:16

干掉僵尸进程的相关文章

开启子进程的两种方式,孤儿进程与僵尸进程,守护进程,互斥锁,IPC机制,生产者与消费者模型

开启子进程的两种方式 # # # 方式一: # from multiprocessing import Process # import time # # def task(x): # print('%s is running' %x) # time.sleep(3) # print('%s is done' %x) # # if __name__ == '__main__': # # Process(target=task,kwargs={'x':'子进程'}) # p=Process(tar

第十九篇:处理僵尸进程的两种经典方法

前言 如果父进程没有结束,而子进程终止了.那么在父进程调用 wait 函数回收这个子进程或者父进程终止以前,这个子进程将一直是僵尸进程. 本文将提供两种方法处理这个问题. 方法一:父进程回收法 wait函数将使其调用者阻塞,直到其某个子进程终止.故父进程可调用wait函数回收其僵尸子进程.除此之外,waitpid函数提供更为详尽的功能( 增加了非阻塞功能以及指定等待功能 ),请读者自行查阅相关资料. 代码实现 1 #include <unistd.h> 2 #include <sys/w

Linux中的僵尸进程和孤儿进程

在UNIX里,除了进程0(即PID=0的交换进程,Swapper Process)以外的所有进程都是由其他进程使用系统调用fork创建的,这里调用fork创建新进程的进程即为父进程,而相对应的为其创建出的进程则为子进程,因而除了进程0以外的进程都只有一个父进程,但一个进程可以有多个子进程.        操作系统内核以进程标识符(Process Identifier,即PID)来识别进程.进程0是系统引导时创建的一个特殊进程,在其调用fork创建出一个子进程(即PID=1的进程1,又称init)

一、进程与信号之僵尸进程

孤儿进程:父进程被终结,子进程成为孤儿进程,被init进程接管 僵尸进程:子进程被终结,内存未被释放,形成僵尸进程 #include <unistd.h> #include <stdlib.h> #include <stdio.h> int main(void) { pid_t pid; pid=fork(); if(pid<0) { printf("fork error"); exit(1); } else if(pid ==0) { //终

服务器产生大量僵尸进程,查询并杀死zombie

一.服务器发生异常报警描述:服务器负载过高,达到160左右,网站访问正常 二.分析产生原因:php统计时,计划任务中的任务产生的大量僵尸进程 三.过程查看:     如何查看僵尸进程:     ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]' 四.解决方案: 如何杀死僵尸进程:(通过临时写下面脚本,杀死其父进程) #!/bin/bash for ZOMBIE in `ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' |

孤儿进程 &amp;&amp; 僵尸进程

background: unix: 每个子进程退出,内核释放该进程所有资源,打开的文件,占用的内存 保留的信息:the process ID,the termination status of the process,the amount of CPU time taken by the process 父进程用wait()/waitpid()释放子进程的保留信息 父进程不调用wait()/waitpid()进程号一直被占用,系统所能提供的进程号有限,没有可用的进程号导致系统不能产生新的进程 Z

孤儿进程和僵尸进程

孤儿进程和僵尸进程 一.定义:什么是孤儿进程和僵尸进程 僵尸进程:一个子进程在其父进程还没有调用wait()或waitpid()的情况下退出.这个子进程就是僵尸进程. 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程.孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作. 僵尸进程将会导致资源浪费,而孤儿则不会. 子进程持续10秒钟的僵尸状态(EXIT_ZOMBIE)------------------------------

孤儿进程与僵尸进程[总结]

http://www.cnblogs.com/Anker/p/3271773.htm 1.前言 之前在看<unix环境高级编程>第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊.今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧.晚上回来google了一下,再次参考APUE,认真总结一下,加深理解. 2.基本概念 我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程.子进程的结束和父进程

linux 如何清理僵尸进程

今天在维护服务器的时候,发现有5个nova-novncproxy的僵尸进程. 26327 ?        S      0:05  \_ /usr/bin/python /usr/bin/nova-novncproxy --config-file=/etc/nova/nova.conf 4765 ?        Z      0:00      \_ [nova-novncproxy] <defunct> 4766 ?        Z      0:00      \_ [nova-no