发送信号给程序,或者列出信号集
SYNOPSIS
kill [-s SIGNAL | -SIGNAL] PID...
kill -l [SIGNAL]...
1.信号操作简要说明
1)kill -l。列出信号名和
2)kill + 信号 + %jobnumber。表示给某个工作发信号
3)kill + 信号 + PID。表示给某个PID发信号
2.重要的几个信号
代号 | 名称 | 内容 |
1 | SIGHUP | 代表『让该 PID 重新读取自己的设定档』 ,类似重新启动 |
2 | SIGINT | 代表用键盘输入的 [ctrl]-c 来中断一个程序的进行。 |
9 | SIGKILL | 代表强制中断一个程序的进行,如果该程序进行到一半, 那么尚未完成的部分可能会 有『半产品』产生,类似 vim会有 .filename.swp 保留下来。 |
15 | SIGTERM | 以正常的结束程序来终止该程序。由于是正常的终止, 所以后续的动作会将他完成。 不过,如果该程序已经发生问题,就是无法使用正常的方法终止时,输入这个 signal也是没有用的。 |
例1:以 ps 找出 syslog 这个服务的 PID 后,再使用 kill 重新读取 syslog 的设定文件数据:
# kill -SIGHUP `ps aux|grep 'syslog'|grep -v 'grep'|awk '{print $2}'`
killall
由于 kill 后面必须要加上 PID (或者是 job number),所以,通常 kill 都会配合 ps, pstree 等指令, 因为我们必须要找到相对应的那个程序的 ID 嘛!但是,如此一来,很麻烦~ 有没有可以利用『下达指令 的名称』来给予讯号的?举例来说,能不能直接将 syslog 这个程序给予一个 SIGHUP 的讯号呢?可以的! 用 killall 吧!
[root@linux ~]# killall [-iIe] [-signal][command name] 参数: -i :interactive 的意思,交互式的,若需要删除时,会出现提示字符给使用者; -e :exact 的意思,表示『后面接的 command name 要一致』,但整个完整的指令 不能超过 15 个字符。 -I :指令名称(可能含参数)忽略大小写。
例1:给予syslogd 这个指令启动的PID一个SIGHUP的讯号
[root@linux ~]# killall -1 syslogd # 如果用 ps aux 仔细看一下,syslogd 才是完整的指令名称。但若包含整个参数, # 则 syslogd -m 0 才是完整的呢!
范例二:强制终止所有以 httpd 启动的程序
[root@linux ~]# killall -9 httpd