kill -9 无法杀死进程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kill -9 无法杀死进程相关的知识,希望对你有一定的参考价值。
参考技术A kill -9 发送SIGKILL信号给进程,将其终止,但对于以下两种情况不适用1.该进程是僵尸进程(STAT z),此时进程已经释放所有的资源,但是没有被父进程释放。僵尸进程要等到父进程结束,或者重启系统才可以被释放。
2.进程处于“核心态”,并且在等待不可获得的资源,处于“核心态 ”的资源默认忽略所有信号。只能重启系统。
kill 只能杀死处于用户状态的进程。
下面是一个自测试例子:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
int main(int argc ,char *argv[])
pid_t pid;
pid = fork();
if(pid<0)
perror("fork");
return -1;
else if(pid==0)
printf("I am a child\n");
exit(0);
else
while(1)
sleep(100);
return 0;
由于父进程没有退出,所以执行ps -aux | grep "z",可以查看进程的状态,发现如下(绿色标出部分)
root 1937 0.0 0.1 389000 4336 ? Sl 09:12 0:00 /usr/bin/gnome-keyring-daemon --daemonize --login
root 4447 0.0 0.0 112680 964 pts/2 R+ 10:16 0:00 grep --color=auto z
[root@localhost linux_test]# ps -aux | grep "[zZ]"
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 128164 6828 ? Ss 09:07 0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 1937 0.0 0.1 389000 4336 ? Sl 09:12 0:00 /usr/bin/gnome-keyring-daemon --daemonize --login
root 4385 0.0 0.0 0 0 pts/0 Z+ 10:16 0:00 [a.out] <defunct>
root 4455 0.0 0.0 112680 976 pts/2 S+ 10:17 0:00 grep --color=auto [zZ]
从以上信息 可以得到该进程的进程号是4385
此时的解决方法有两种
1、 cat /proc/4385/status 找到该子进程对应的父进程,将其父进程杀死
State: Z (zombie)
Tgid: 4385
Ngid: 0
Pid: 4385
PPid: 4384
执行kill -9 4384 如果父进程也杀不死,那就只能执行重启了
2、重启
linux 根据进程名杀死进程 -kill进程名
来源:
https://www.cnblogs.com/jins-note/p/9636969.html
前两天一个老师给我出了一个linux操作上的问题,现在知道进程名怎样杀死这个进程。或许很多人都会和我一样说用
或是
#pkill 进程名
#killall 进程名
的确这个两个命令都能做到这些,而且我们平时一般知道进程名需要杀死进程的时候也都是用的这两个命令。可是他叫我用kill 命令来完成这个一操作。我们知道kill 要杀死进程是需要知道进程的id的即进程号,其实这个思路就是需要通过其他命令获取相应进程的进程号,然后用kill 杀掉。
这里提供两个方法:
这个是利用管道和替换将 进程名对应的进程号提出来作为kill的参数。
sudo kill -9 $(ps -ef|grep 进程名关键字|gawk \'$0 !~/grep/ {print $2}\' |tr -s \'\\n\' \' \')
很显然上面的方法能完成但是过于复杂,下面这种就显得简单的多了
sudo kill -9 $(pidof 进程名关键字)
以上是关于kill -9 无法杀死进程的主要内容,如果未能解决你的问题,请参考以下文章