kill和killall:向进程发送信号

简介

在运行linux程序时,当遇到需要结束某一特定进程的情形,kill和killall命令便成为了首选.它们本质上都是通过向进程发送信号来操纵进程的行为的.


安装

在centos7上,kill命令已系统自带,而killall命令在minimal版本下则需事先安装psmisc软件包才能使用,此软件包还附带fuser,pstree等命令(注:这3个命令都用于管理/proc目录)


使用

  • kill
]# 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

其中常用的信号有2号中断信号,9号杀死信号,15号杀死信号(gentle)

]# ps aux|grep nginx
root      12367  0.0  0.2 122916  2116 ?        Ss   17:20   0:00 nginx: master process /usr/sbin/nginx
nginx     12368  0.0  0.3 123380  3144 ?        S    17:20   0:00 nginx: worker process
nginx     12369  0.0  0.3 123380  3140 ?        S    17:20   0:00 nginx: worker process
root      12371  0.0  0.0 112664   972 pts/1    S+   17:20   0:00 grep --color=auto nginx
]# kill -9 12367 12368 12369

强行结束所有nginx进程.kill命令往往需配合ps命令使用以便知道进程pid
- killall

]# killall -9 nginx

killall命令依据进程的名称发送信号,因此不需要事先使用ps命令查看pid,可以认为是kill命令的增强版.此外,它还可以依据用户名,正则表达式等多种方式来限定进程


补充

kill和killall命令除了能发送既有的信号意外,还能发送特殊的0信号.该信号不对进程做任何干预,仅仅是确定该进程是否存在而已.因此往往被用于集群服务中确认某一服务是否正常运行

]# killall -0 nginx
]# echo $?//若返回0,则nginx进程正常运行,若返回1,则nginx服务已停止

你可能感兴趣的:(学习总结,linux)