欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入我们的社群。

杀死linux进程的N种方法

Linux 迷途小书童 4年前 (2020-09-27) 3886次浏览 0个评论

软硬件环境

  • ubuntu 18.04 64bit

视频看这里

此处是 youtube 的播放链接,需要科学上网。喜欢我的视频,请记得订阅我的频道,打开旁边的小铃铛,点赞并分享,感谢您的支持。

常规操作

linux 中,我们杀死某个进程,需要知道进程号(pid)或者进程名,这样就可以通过 kill 命令来杀掉它。首先,我们可以通过 ps ax 命令来查看进程号

ps ax | grep firefox

我们以浏览器 firefox 为例

(base) xugaoxiang@1070Ti:~$ ps ax | grep firefox
23237 tty1     Sl+    0:06 /usr/lib/firefox/firefox
23368 tty1     Sl+    0:00 /usr/lib/firefox/firefox -contentproc -childID 1 -isForBrowser -prefsLen 1 -prefMapSize 227974 -parentBuildID 20200831163820 -appdir /usr/lib/firefox/browser 23237 true tab
23403 tty1     Sl+    0:01 /usr/lib/firefox/firefox -contentproc -childID 2 -isForBrowser -prefsLen 6335 -prefMapSize 227974 -parentBuildID 20200831163820 -appdir /usr/lib/firefox/browser 23237 true tab
23422 tty1     Sl+    0:00 /usr/lib/firefox/firefox -contentproc -childID 3 -isForBrowser -prefsLen 6335 -prefMapSize 227974 -parentBuildID 20200831163820 -appdir /usr/lib/firefox/browser 23237 true tab
23491 tty1     Sl+    0:00 /usr/lib/firefox/firefox -contentproc -childID 4 -isForBrowser -prefsLen 7107 -prefMapSize 227974 -parentBuildID 20200831163820 -appdir /usr/lib/firefox/browser 23237 true tab
23535 pts/5    R+     0:00 grep --color=auto firefox

由上面输出,我们发现 firefox 浏览器是一个多进程的应用,进程号为23237、23368、23403、23422、23491都是相关进程。那我们要删除对应进程,只需要执行

kill -9 $进程号

firefox 这个示例中,如果要完全删除,可以把5个相关进程都 kill 或者只杀掉父进程,也就是进程号为23237的进程

kill -9 23237

其中-9是指定了传递给进程的信号是9,即强制终止进程。关于 linux 的信号,可以通过 kill -l 来查看

(base) xugaoxiang@1070Ti:~$ kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

改进一

使用 pgrep 命令,它是专门针对进程的 grep,相比常规,可以少敲一些字符,以 pycharm 进程为例

(base) xugaoxiang@1070Ti:~$ pgrep pycharm
3095

命令直接给出了进程号,非常的清爽。拿到了进程号,就可以直接 kill -9 3095

改进二

使用 pidof 命令获取进程号,与 pgrep 不同的是,pidof 必须指定进程的全名

(base) xugaoxiang@1070Ti:~$ pidof firefox
24486 24439 24387 24335

(base) xugaoxiang@1070Ti:~$ kill -9 24486

改进三

前面都是先找出进程号,然后使用 kill,现在该把他们两整合起来了

pgrep pycharm | xargs kill -9

xargs kill -s 9 中的 xargs 命令是用来把前面命令的输出结果(PID)作为 kill -9 命令的参数,并执行该命令,kill -9 会杀掉指定进程

改进四

针对改进三,我们将 kill -9 往前移,这样可以省略掉命令 xargs

kill -9 `pgrep pycharm`

pgrep pycharm 命令使用包括起来,就是键盘上边数字1旁边的符号

改进五

使用 pkill 命令,它是 pgrepkill 的结合体

pkill -9 pycharm

改进六

使用 killall 命令,它会发送信号到所有的指定进程,如果没有明确信号,默认的是 SIGTERM,也就是停止(TERMination)。

killall -9 pycharm

killallpkill 是相似的,不过如果给出的进程名不完整,killall 会报错。pkill 或者 pgrep 只要给出进程名的一部分就可以终止进程。

参考资料

喜欢 (0)

您必须 登录 才能发表评论!