首页 » 运维 » 基本知识 » 正文

如何杀死一个“孤儿进程”

首先,什么是孤儿进程?

孤儿进程,顾名思义,就是哪些没有父进程的进程,为啥没有父进程了呢?因为父进程挂了,他们还没有挂,这个时候他们就会被孤儿院(init 进程号为1)的收养了…..

今天遇到一个,各种kill -9 啊,杀不掉啊,google之后告诉我类似这种僵尸进程和孤儿进程只能重启….

好吧,今天就说明一下还有一个解决方式,注意,这个解决方式可能只适应特殊情况,请参考即可

首先我们可能知道进程的id

ps -Lf -p 50966

上边这个命令会显示:NLWP (number of threads) and LWP (thread ID)

我们可能会得到类似的结果:

UID PID PPID LWP C NLWP STIME TTY TIME CMD
2288 50966 1 50966 0 2 Nov03 ? 00:00:00 [java]
2288 50966 1 51004 0 2 Nov03 ? 00:00:00 [java]

然后我们可以看一下cat /proc/51004/cgroup,我们就能看到一些文件,最重要的目的还是为了确认要进入哪个文件夹
7:blkio:/openshift/XYZ
6:net_cls:/openshift/XYZ
5:freezer:/openshift/XYZ
4:devices:/
3:memory:/openshift/XYZ
2:cpuacct:/openshift/XYZ
1:cpu:/openshift/XYZ

cd /cgroup/freezer/XYZ

进入之后查看一下状态:cat freezer.state
FROZEN

状态是FROZEN,所以,执行如下命令

echo THAWED > freezer.state

然后….进程自己退出了…..

ps -Lf -p 50966
UID PID PPID LWP C NLWP STIME TTY TIME CMD

注意,这个情况可能只使用于openshift的环境重

Zhiming Zhang

Senior devops at Appannie
一个奔跑在运维路上的胖子
Zhiming Zhang

Latest posts by Zhiming Zhang (see all)