软硬件环境
* ubuntu 18.04 64bit
常规操作
在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/firefox23368 tty1 Sl+ 0:00 /usr/lib/firefox/firefox
-contentproc -childID1 -isForBrowser -prefsLen 1 -prefMapSize 227974
-parentBuildID20200831163820 -appdir /usr/lib/firefox/browser 23237 true tab
23403 tty1 Sl+ 0:01 /usr/lib/firefox/firefox -contentproc -childID 2
-isForBrowser -prefsLen6335 -prefMapSize 227974 -parentBuildID 20200831163820
-appdir /usr/lib/firefox/browser23237 true tab 23422 tty1 Sl+ 0:00
/usr/lib/firefox/firefox -contentproc -childID3 -isForBrowser -prefsLen 6335
-prefMapSize227974 -parentBuildID 20200831163820 -appdir
/usr/lib/firefox/browser23237 true tab 23491 tty1 Sl+ 0:00
/usr/lib/firefox/firefox -contentproc -childID4 -isForBrowser -prefsLen 7107
-prefMapSize227974 -parentBuildID 20200831163820 -appdir
/usr/lib/firefox/browser23237 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)
SIGTRAP6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12)
SIGUSR213) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT
19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25)
SIGXFSZ26) 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+540) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44)
SIGRTMIN+1045) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49)
SIGRTMIN+1550) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54)
SIGRTMAX-1055) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59)
SIGRTMAX-560) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64)
SIGRTMAX
改进一
使用pgrep命令,它是专门针对进程的grep,相比常规,可以少敲一些字符,以pycharm进程为例
(base) xugaoxiang@1070Ti:~$ pgrep pycharm 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只要给出进程名的一部分就可以终止进程。