B站: 迷途小书童的Note;微信公众号: Dev_Club;个人微信:xituxiaoshutong100

杀死linux进程的N种方法

Linux 迷途小书童 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)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址