软硬件环境
- 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
只要给出进程名的一部分就可以终止进程。