Linux/UNIX:Kill命令示例

时间:2020-01-09 10:45:52  来源:igfitidea点击:

如何使用命令提示符将KILL信号发送到Linux或者类Unix操作系统下的进程?
使用kill命令将信号发送到pid(进程标识符)指定的每个进程。
默认信号是SIGTERM(终止过程)。

语法

基本语法如下:

kill PID

或者

kill -s signalName PID

或者

kill -signalName PID

或者

kill -signalNumber PID

其中:

  • signalNumber:一个非负十进制整数,指定要发送的信号,而不是默认的TERM。
  • signalName:一个符号信号名称,指定要发送的信号,而不是默认的TERM。
  • PID:指定终止信号的进程列表。每个PID可以是以下任意一种:
  • n:如果PID为正值,则kill命令发送进程ID等于PID的进程。
  • 0:当前过程组中的所有过程均已发出信号。
  • -1:所有pid大于1的进程都会被发信号,即kill命令将信号发送给发送方有效用户拥有的所有进程。

常见的Linux和UNIX信号名称和编号

所有可用的UNIX信号都有不同的名称,并映射到某些数字,如下所述:

选项含义示例
编号名称(简称)说明
---------
0SIGNULL(NULL)
1SIGHUP(HUP)挂断
2SIGINT(INT)中断
3SIGQUIT(QUIT)退出
9SIGKILL(KILL)杀死
15SIGTERM(TERM)终止
24SIGSTOP(停止)停止
25SIGTSTP(STP)终端
26SIGCONT(CONT)继续

请注意,数字和信号之间的特定映射在Unix实现之间可能有所不同,请通过执行以下命令来查看手册页入口signal(5):

man 5 signal

或者

man 7 signal

指定信号名称的列表存储在/usr/include/sys/signal.h中;因此,请使用更多命令查看相同内容:

$ more /usr/include/sys/signal.h

kill命令示例

要列出信号名称,请按如下所示传递-l选项:

$ kill -l

输出示例:

1) SIGHUP  2) SIGINT   3) SIGQUIT  4) SIGILL
5) SIGTRAP  6) SIGABRT  7) SIGEMT   8) SIGFPE
9) SIGKILL 10) SIGBUS  11) SIGSEGV 12) SIGSYS
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGURG
17) SIGSTOP 18) SIGTSTP 19) SIGCONT 20) SIGCHLD
21) SIGTTIN 22) SIGTTOU 23) SIGIO 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGINFO 30) SIGUSR1 31) SIGUSR2

查找进程的PID

使用" pgrep命令"或者"带有grep命令的ps命令作为shell管道/过滤器"。
在此示例中,找到用于Firefox的PID,执行:

$ pgrep firefox

或者

$ ps aux | grep [f]irefox

发送kill信号以处理ID 257

使用以下命令杀死pid 257并正常退出:

kill 257

要找到任何作业或者命令的pid,请使用ps命令,如上所述:

ps | grep command
ps aux | grep command
ps aux | grep apache
pgrep apache

以下都是与-9 SIGKILL等效的命令(即,在没有"清理"的情况下强制杀死1414进程),并且应仅用作终止进程的最后手段:

kill -s SIGKILL 1414 
kill -s KILL 1414 
kill -s 9 1414 
kill -SIGKILL 1414 
kill -KILL 1414

如何将默认的TERM/SIGTERM(15)发送到多个PID#1212、1313和1414?

执行以下命令:

$ kill 1212 1313 1414

执行以下命令以将KILL单个发送给多个pid:

$ kill -9 1212 1313 1414

如何指定要发送到PID#4242的信号?

将-s选项传递给给定的信号作为信号编号或者信号名称。
语法为:

$ kill -s signal pid

要发送pid 4242的停止/挂起信号,请执行:

$ kill -s stop 4242

在此示例中:

## Start a gui command called xeyes in background:
xeyes &
jobs -l
 
## Stop it xeyes whose pid is 3405  by sending STOP (stop/suspend) signal
kill -s STOP 3405
jobs -l
 
## Resume/run stopped xeyes whose pid is 3405 by sending CONT (continue) signal
kill -s CONT 3405
jobs -l
 
## Finally kill xeyes whose pid is 3405 by sending TERM (exit/terminate safely) signal
kill -s TERM 3405

如何杀死root用户或者系统用户拥有的特权进程/PID?

您需要使用su或者sudo命令登录到root用户,以将指定的信号发送到root/system用户拥有的指定进程或者进程组。
在此示例中,使用su命令登录系统:

$ su 
Password: 
# pgrep httpd
4243
# kill 4243

或者使用sudo命令(如果在系统上配置为杀死PID 4243):

$ sudo kill 4243
Password: