软硬件环境
- 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
命令,它是 pgrep
和 kill
的结合体
pkill -9 pycharm
改进六
使用 killall
命令,它会发送信号到所有的指定进程,如果没有明确信号,默认的是 SIGTERM
,也就是停止(TERMination
)。
killall -9 pycharm
killall
和 pkill
是相似的,不过如果给出的进程名不完整,killall
会报错。pkill
或者 pgrep
只要给出进程名的一部分就可以终止进程。