kill命令详解kill -9、kill -15区别
kill相当于赐死,kill -9相当于斩立决
kill命令默认的信号就是15,也就是 kill -15
1.从help中可以清晰的看到 -n 指的是 信号编号
2.kill -l(查看Linux/Unix的信号变量)
3.说一下SIGKILL(kill -9)和SIGTERM(kill -15)
kill -9 PID 是操作系统从内核级别强制杀死一个进程.
kill -15 PID 可以理解为操作系统发送一个通知告诉应用主动关闭.
SIGNTERM(15) 的效果是正常退出进程,退出前可以被阻塞或回调处理。并且它是Linux缺省的程序中断信号。
大部分程序接收到SIGTERM信号后,会先释放自己的资源,然后再停止。但是也有程序可以在接受到信号量后,做一些其他的事情,并且这些事情是可以配置的。如果程序正在等待IO,可能就不会立马做出响应。也就是说,SIGTERM多半是会被阻塞的、忽略。
但是kill -9 pid也并不是可以杀死所有的程序,总有那些状态下的程序无法立刻响应。
4.kill -9杀不掉的怎么办(僵尸进程)
4.1 用ps和grep命令寻找僵尸进程
ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'
命令注解:
-A 参数列出所有进程-o 自定义输出字段 我们设定显示字段为 stat(状态), ppid(进程父id), pid(进程id),cmd(命令)这四个参数 因为状态为 z或者Z的进程为僵尸进程。
4.2我们使用grep抓取stat状态为zZ进程,运行结果参考如下:
Z 12334 12339 /path/cmd
4.3使用 kill -HUP 12339来杀掉这个僵尸进程
运行后,可以再次运行
来确认是否已经将僵尸进程杀死 如果kill 子进程无效,可以尝试kill 其父进程来解决问题,例如上面例子父进程pid是 12334,那么我们就运行
4.4 kill -HUP 12334
来解决问题