技术改变生活

博客园 首页 新随笔 联系 订阅 管理

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
1
2
3
4
5
6
7
8
其中常用的信号有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
1
2
3
4
5
6
强行结束所有nginx进程.kill命令往往需配合ps命令使用以便知道进程pid
- killall

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

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

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

posted on 2020-03-27 17:51  小阿峰  阅读(1011)  评论(0编辑  收藏  举报