杀死进程
如何在Linux中终止进程
终止Linux中正在运行的进程
进程基本上是正在执行的程序。Linux中的每个进程都称为唯一的进程ID或简称PID
。从另一个进程派生的任何进程都具有关联的父进程IDPPID
。有关进程的说明,请访问我们的进程页面。在大多数情况下,进程将自行运行和终止,但是,并非总是如此。有时,程序可能会变得无响应并拒绝终止,甚至可能开始消耗大量的内存或CPU。发生这种情况时,您可能需要终止这些进程。在Linux中,有许多用于标识进程的命令。我们将介绍一些比较流行的方法,这些方法可以识别系统上正在运行的进程以及如何终止此类进程。
top命令
top可能是最常用的命令之一,用于快速识别正在运行的进程及其消耗的资源。
为了演示top
,我们将运行一个会消耗大量CPU的小脚本。这将很容易发现在顶部
。然后,我们将识别PID
-进程ID,然后从交互式菜单屏幕中将其杀死。
#!/bin/bash #This will cause the cat command to consume CPU :-( CORES=1 for i in `seq 1 $CORES` do cat /dev/zero > /dev/null & done
查看top输出。
可以看到脚本的PID值为4235
,并且正在消耗大量CPU。我们还可以看到正在运行的命令是cat
。
要终止此进程,我们只需在键盘上按字母k
即可。然后,系统将提示您提供要杀死的PID
kill命令和信号说明
当您从命令行或交互式工具(例如top
)执行kill
命令时,实际上是在发送信号值。默认值为15
。这些数字对应于系统用于处理进程的特定信号。
kill命令的语法
kill 信号或选项 PID
我们可以执行命令kill 4235
。这将向进程发送表示SIGTERM
的信号15
。
如果在kill
命令之后未提供任何信号,则使用默认值15
。
执行命令kill -9 4235
。-9
表示信号SIGKILL
。
查看所有可用到系统的信号的完整列表:
john@john-desktop:~/example$ 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
常用的kill选项
- kill -9 -1:杀死所有可以杀死的进程(您拥有的进程)。
- kill -l 9:将数字9转换为信号名称。(在这种情况下为SIGKILL)。
- kill 246 810 1214 1618:将默认信号SIGTERM发送到其PID指定的所有那些进程。
ps-进程显示命令
ps
命令报告与进程有关的信息。
要使用标准语法查看系统上的每个进程:
ps -e ps -ef ps -eF ps -ely
使用BSD语法查看系统上的每个进程:
ps ax ps axu
打印进程树:
ps -ejH ps axjf
ps命令示例
john@john-desktop:~/example$ ps PID TTY TIME CMD 3818 pts/0 00:00:00 bash 4737 pts/0 00:00:00 ps
Linux如何搜索占用大量CPU的进程
显示消耗大量CPU的进程的另一种方法是将ps
命令与sort
命令结合使用:
john@john-desktop:~/example$ ps aux | sort -k 3,3 | tail -n 5 john 4640 31.0 0.0 4484 540 pts/0 R 20:48 3:47 cat /dev/zero john 4643 31.0 0.0 4484 544 pts/0 R 20:48 3:44 cat /dev/zero john 4637 31.4 0.0 4484 544 pts/0 R 20:48 3:50 cat /dev/zero john 3928 3.4 4.1 558976 105880 ? Sl 20:30 1:03 /opt/google/chrome/chrome
在上面的示例中,我们将ps aux
命令的输出通过管道进行排序。然后,我们在第三列CPU%
上进行排序。为了将输出结果限制为几行,我们使用tail
命令。
根据名称搜索进程
查找名为gedit
的进程
john@john-desktop:~/example$ ps -ef | grep gedit john 3792 1 1 21:16 ? 00:02:10 gedit john 4758 3818 0 23:06 pts/0 00:00:00 grep --color=auto gedit
找到了两个进程,一个是PID为3792
的实际进程gedit
。另一个进程是我们的grep命令。如果我们想将grep进程排除在结果之外,可以使用-v
选项:
john@john-desktop:~/example$ ps -ef | grep -v grep | grep edit john 3792 1 1 21:16 ? 00:02:14 gedit
pgrep
pgrep是可用于查找进程(PID)的命令。从前面的示例中可以看到,我们将ps
命令与grep
一起使用来缩小搜索范围。pgrep
可以用很多简单的格式
搜索用户john
运行的进程名gedit
john@john-desktop:~/example$ pgrep -u john gedit 3792
killall-按名称杀死所有进程
命令killall
向运行任何指定命令的所有进程发送信号以终止。如果未指定信号,则默认发送SIGTERM
。如果您希望杀死具有相同名称的多个进程,此命令很有用。
如果要杀死下面cat
命令的三个进程,则可以执行命令:kill 4637 4640 4643
,但是,我们可以使用killall
命令并执行killall cat
john@john-desktop:~/example$ ps aux | sort -k 3,3 | tail -n 5 john 3928 2.8 4.1 558976 106480 ? Sl 20:30 1:06 /opt/google/chrome/chrome john 4640 30.8 0.0 4484 540 pts/0 R 20:48 6:26 cat /dev/zero john 4643 30.8 0.0 4484 544 pts/0 R 20:48 6:24 cat /dev/zero john 4637 31.0 0.0 4484 544 pts/0 R 20:48 6:29 cat /dev/zero USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND john@john-desktop:~/example$ killall cat john@john-desktop:~/example$ ps aux | sort -k 3,3 | tail -n 5 john 4548 1.4 1.0 188948 26804 ? Sl 20:41 0:24 gedit john 1962 1.8 2.2 279096 57604 ? Sl 20:17 0:58 compiz root 1198 2.6 0.6 25624 16480 tty7 Ss+ 20:16 1:24 /usr/bin/X :0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch -background none john 3928 2.8 4.1 558976 106480 ? Sl 20:30 1:06 /opt/google/chrome/chrome