kill

Posted dance-walter

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kill相关的知识,希望对你有一定的参考价值。

kill - terminate a process

发送指定的信号到相应进程。不指定信号将发送SIGTERM(15)终止指定进程。若仍无法终止该程序可用“-KILL” 参数,其发送的信号为SIGKILL(9) ,将强制结束进程,使用ps命令或者jobs 命令可以查看进程号。

格式:
kill [option] pid

常用参数:

  • -l:打印信号名称列表,或将给定的信号作为参数转换为名称。
  • -s:指定要发送出的信号
  • -u user:指定用户



列出所有信号名称:

[[email protected] ~]# 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



常用信号名称:

信号数字 信号名称 信号描述
1 SIGHUP 终端断线,可以让该进程重新重读配置文件。类似重新启动,ExecReload=/bin/kill -s HUP $PID
2 SIGINT 中断程序,相当于ctrl+c
3 SIGQUIT 退出程序,相当于ctrl+,ExecStop=/bin/kill -s QUIT $PID
9 SIGKILL 强制终止,代表强制中断一个程序的进行,效果和vim非正常退出一样。
15 SIGTERM 正常退出,以正常的方式来终止该程序。由于是正常的终止,所以后续的动作会将他完成。
18 SIGCONT 继续(与SIGSTOP相反,fg/bg命令)
19 SIGSTOP 暂停,相当于ctrl+Z


示例:

[[email protected] ~]# kill -l 15  #将给定的15信号转换成名称
TERM
[[email protected] ~]# kill -l TERM
15


[[email protected] ~]# ps -ef | grep mongod
root       9731   4807  0 21:40 pts/1    00:00:00 tail -f /var/log/mongodb/mongod.log
mongod    10698      1 24 21:58 ?        00:00:03 /usr/bin/mongod -f /etc/mongod.conf
root      10762   5786  0 21:58 pts/2    00:00:00 grep --color=auto mongod
[[email protected] ~]# kill 10698   #结束mongod进程
[[email protected] mongodb]# tail -f /var/log/mongodb/mongod.log  #查看日志,日志能够收到信号为15的信号,因为此测试进程为非忙碌状态,所以直接关闭了。如果直接使用kill -9日志就收不到日志,会直接把进程给杀掉了。
...
2019-01-22T21:58:42.783-0500 I CONTROL  [signalProcessingThread] got signal 15 (Terminated), will terminate after current cmd ends
2019-01-22T21:58:42.784-0500 I NETWORK  [signalProcessingThread] shutdown: going to close listening sockets...
2019-01-22T21:58:42.784-0500 I NETWORK  [signalProcessingThread] removing socket file: /tmp/mongodb-27017.sock
2019-01-22T21:58:42.784-0500 I CONTROL  [signalProcessingThread] Shutting down free monitoring
2019-01-22T21:58:42.785-0500 I FTDC     [signalProcessingThread] Shutting down full-time diagnostic data capture
2019-01-22T21:58:42.787-0500 I STORAGE  [signalProcessingThread] WiredTigerKVEngine shutting down
2019-01-22T21:58:42.876-0500 I STORAGE  [signalProcessingThread] shutdown: removing fs lock...
2019-01-22T21:58:42.877-0500 I CONTROL  [signalProcessingThread] now exiting
2019-01-22T21:58:42.877-0500 I CONTROL  [signalProcessingThread] shutting down with code:0


陷阱trap:

shell脚本中使用trap用来获取signal信号的工具。KILL和STOP这两个信号无法被捕捉。一般来说,在设置信号陷阱时,只会考虑HUP、INT、QUIT、TERM这4个会终止、中断进程的信号。

格式:
trap ‘command|function‘ signal_list

示例:

[[email protected] ~]# vim b.sh
#!/bin/sh

trap ‘echo yes‘ SIGINT     #捕捉INT信号,并输出yes
trap ‘echo today‘ SIGTERM  #捕捉TERM信号,并输出today
for((;;)) do
    sleep 1
    echo "no"
done


[[email protected] ~]# bash b.sh    #执行的过程
^Cyes        #按下ctrl+c,输出了yes,因为shell脚本捕获了中断进程并输出yes,所以中断信号就此消失,并继续执行后续命令
no
no
no
no
no
no
no
today    #重开一个会话,并获取执行此脚本的进程pid号,并使用 kill pid,终止进程,脚本捕捉到信号后输出today
no
...
Killed   #kill -9 pid
[[email protected] ~]# 



总结:
kill命令KILL|9信号只有进程无法正常关闭时,才能使用。HUP|1用来重读配置文件。ctrl+c是信号INT|2














以上是关于kill的主要内容,如果未能解决你的问题,请参考以下文章

Kill

iPhone 切换视图 _KILL !问题

如何防止android app被kill

matplot画图kill问题,形成思路

如何通过 C# kill 指定进程?

SpringBoot 优雅停机