Linux學習28-linux一行命令殺掉指定名稱進程(killall 、kill 、pkill)


前言

常見面試題:如何用一句 linux 指令,查找到指定名稱的進程並殺掉
常用的殺進程的三個指令:killall 、kill 、pkill

殺進程幾種方式

killall命令用於殺死指定名字的進程(kill processes by name)

killall [參數] [進程名]

kill命令殺死指定進程PID的進程

kill [參數] [進程id]

pkill 和killall差不多,也是用於殺掉指定名稱的進程

pkill [參數] [進程名]

killall

先用ps查找出需要殺掉的進程

ps -ef |grep 進程名稱

比如我想殺掉 httpd 的進程

[root@VM_0_2_centos opt]# ps -ef | grep httpd
root     21982 21885  0 21:06 ?        00:00:00 /opt/zbox/run/apache/httpd -k start
65534    21983 21982  0 21:06 ?        00:00:00 /opt/zbox/run/apache/httpd -k start
65534    21984 21982  0 21:06 ?        00:00:00 /opt/zbox/run/apache/httpd -k start
65534    21999 21982  0 21:06 ?        00:00:00 /opt/zbox/run/apache/httpd -k start
root     22321 19229  0 21:06 pts/0    00:00:00 grep --color=auto httpd

查找出來的進程很多,如果想一次性殺掉,可以用killall

killall -9 httpd

再去查看進程就被殺掉了

[root@VM_0_2_centos opt]# killall -9 httpd
[root@VM_0_2_centos opt]# ps -ef | grep httpd
root     22781 19229  0 21:08 pts/0    00:00:00 grep --color=auto httpd

pkill

pkill 和 killall用法差不多,也是根據進程名稱來殺掉全部

pkill -9 httpd

[root@VM_0_2_centos opt]# ps -ef | grep httpd
root     23284 23216  0 21:09 ?        00:00:00 /opt/zbox/run/apache/httpd -k start
65534    23290 23284  0 21:09 ?        00:00:00 /opt/zbox/run/apache/httpd -k start
65534    23292 23284  0 21:09 ?        00:00:00 /opt/zbox/run/apache/httpd -k start
65534    23294 23284  3 21:09 ?        00:00:00 /opt/zbox/run/apache/httpd -k start
root     23377 19229  0 21:09 pts/0    00:00:00 grep --color=auto httpd
[root@VM_0_2_centos opt]# pkill -9 httpd
[root@VM_0_2_centos opt]# ps -ef | grep httpd
root     23680 19229  0 21:09 pts/0    00:00:00 grep --color=auto httpd

kill

kill 是用於殺掉單個進程,根據進程的PID, ps -ef查出來的第二列就是PID

[root@VM_0_2_centos opt]# ps -ef | grep httpd
root     24431 24361  0 21:11 ?        00:00:00 /opt/zbox/run/apache/httpd -k start
65534    24432 24431  0 21:11 ?        00:00:00 /opt/zbox/run/apache/httpd -k start
65534    24433 24431  0 21:11 ?        00:00:00 /opt/zbox/run/apache/httpd -k start
65534    24445 24431  0 21:11 ?        00:00:00 /opt/zbox/run/apache/httpd -k start
root     24519 19229  0 21:11 pts/0    00:00:00 grep --color=auto httpd
[root@VM_0_2_centos opt]# kill -9 24431

這里 kill 是殺掉單個進程PID,如果想殺掉全部的,需配合 awk 命令

ps -ef | grep httpd | awk '{print $2}' | xargs kill -9

[root@VM_0_2_centos opt]# ps -ef | grep httpd
root     26267 26194  0 21:15 ?        00:00:00 /opt/zbox/run/apache/httpd -k start
65534    26269 26267  0 21:15 ?        00:00:00 /opt/zbox/run/apache/httpd -k start
65534    26270 26267  0 21:15 ?        00:00:00 /opt/zbox/run/apache/httpd -k start
65534    26273 26267  0 21:15 ?        00:00:00 /opt/zbox/run/apache/httpd -k start
root     26358 19229  0 21:15 pts/0    00:00:00 grep --color=auto httpd
[root@VM_0_2_centos opt]# ps -ef | grep httpd | awk '{print $2}' | xargs kill -9
kill: sending signal to 26652 failed: No such process
[root@VM_0_2_centos opt]# ps -ef | grep httpd
root     26664 19229  0 21:15 pts/0    00:00:00 grep --color=auto httpd
[root@VM_0_2_centos opt]# 

參數說明

  • ps -ef 是linux 里查看所有進程的命令。
  • grep httpd 所有含有關鍵字"httpd"的進程
  • awk '{print $2}' 輸出第二列的PID
  • xargs 是將獲取到的多個PID標准輸入轉為命令行參數。
  • kill -9 殺掉xargs獲取到的對應的PID

如果能准確知道進程名稱,可以直接用killall 和pkill ,如果是模糊匹配進程名稱,就用最后一個

ps -ef | grep 進程名稱 | awk '{print $2}' | xargs kill -9


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM