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信号都有不同的名称,并映射到某些数字,如下所述:
选项 | 含义 | 示例 |
---|---|---|
编号 | 名称(简称) | 说明 |
--- | --- | --- |
0 | SIGNULL(NULL) | 空 |
1 | SIGHUP(HUP) | 挂断 |
2 | SIGINT(INT) | 中断 |
3 | SIGQUIT(QUIT) | 退出 |
9 | SIGKILL(KILL) | 杀死 |
15 | SIGTERM(TERM) | 终止 |
24 | SIGSTOP(停止) | 停止 |
25 | SIGTSTP(STP) | 终端 |
26 | SIGCONT(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: