进程信号
进程的管理主要是指进程的关闭与重启。我们一般关闭或重启软件,都是关闭或重启它的程序,而不是直接操作进程的。比如,要重启 apache 服务,一般使用命令"service httpd restart"重启 apache的程序。
那么,可以通过直接管理进程来关闭或重启 apache 吗?答案是肯定的,这时就要依赖进程的信号(Signal)了。我们需要给予该进程号,告诉进程我们想要让它做什么。
系统中可以识别的信号较多,我们可以使用命令"kill -l"或"man 7 signal"来查询。命令如下:
查询所有支持的信号:[root@localhost ~]# kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL10) SIGUSR111) SIGSEGV12) SIGUSR213) SIGPIPE14) SIGALRM15) SIGTERM16) SIGSTKFLT17) SIGCHLD18) SIGCONT19) SIGSTOP20) SIGTSTP21) SIGTTIN22) SIGTTOU23) SIGURG24) SIGXCPU25) SIGXFSZ26) SIGVTALRM27) SIGPROF28) SIGWINCH29) SIGIO30) SIGPWR31) SIGSYS34) SIGRTMIN35) SIGRTMIN 136) SIGRTMIN 237) SIGRTMIN 338) SIGRTMIN 439) SIGRTMIN 540) SIGRTMIN 641) SIGRTMIN 742) SIGRTMIN 843) SIGRTMIN 944) SIGRTMIN 1045) SIGRTMIN 1146) SIGRTMIN 1247) SIGRTMIN 1348) SIGRTMIN 1449) SIGRTMIN 1550) SIGRTMAX-1451) SIGRTMAX-1352) SIGRTMAX-1253) SIGRTMAX-1154) SIGRTMAX-1055) SIGRTMAX-956) SIGRTMAX-857) SIGRTMAX-758) SIGRTMAX-659) SIGRTMAX-560) SIGRTMAX-461) SIGRTMAX-362) SIGRTMAX-263) SIGRTMAX-164) SIGRTMAX常用信号及其含义信号号码 信号名 作用1 HUP 挂起信号,可以让进程重新加载配置文件2 INT 中断信号,起到结束进程的作用,和ctrl c 的作用一样3 QUIT 让进程退出,结果是进程退出(温柔的杀)能用3不用99 KILL 本信号不能被阻塞、处理和忽略。一般用于强制中止进程(强杀)尽量少用15 TERM 进程终止,这是默认信号=kill 正常结束进程的信号18 CONT 被暂停的进程将继续恢复运行(比如恢复放后台的baidu.com)19 STOP 暂停进程20 TSTP 用户停止请求,作用类似于ctrl z 把进程放到后台并暂停kill命令
kill 命令的执行原理是这样的,kill 命令会向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作。
kill 命令的基本格式如下:[root@localhost ~]# kill [-信号] PID#例如:-1重新加载配置文件[root@localhost ~]# pstree -p |grep nginx 原始状态 |-nginx(7785)---nginx(7901)[root@localhost ~]# vim /etc/nginx/nginx.conf 改配置文件user xxx; 改为xxxworker_processes 5 ;......[root@localhost ~]# pstree -p |grep nginx 看一眼,没变 |-nginx(7785)---nginx(7901)[root@localhost ~]# kill -1 7785 kill -1 让nginx的主进程7785重新启动[root@localhost ~]# pstree -p |grep nginx 再看一眼,变了 |-nginx(7785)- -nginx(7912) | |-nginx(7913) | |-nginx(7914) | |-nginx(7915) | `-nginx(7916)[root@localhost ~]# ps -ef | grep nginxroot 7785 1 0 11:45 ? 00:00:00 nginx: master process nginxxxx 7912 7785 0 12:05 ? 00:00:00 nginx: worker processxxx 7913 7785 0 12:05 ? 00:00:00 nginx: worker processxxx 7914 7785 0 12:05 ? 00:00:00 nginx: worker processxxx 7915 7785 0 12:05 ? 00:00:00 nginx: worker processxxx 7916 7785 0 12:05 ? 00:00:00 nginx: worker processroot 7920 7651 0 12:05 pts/0 00:00:00 grep --color=auto nginx# -3 -9 温柔杀、强杀[root@localhost ~]# vim 1txt // ctrl z 挂后台[1] Stopped vim 1txt[root@localhost ~]# ps -ef |grep vimroot 7437 7220 0 10:32 pts/0 00:00:00 vim 1txtroot 7439 7220 0 10:32 pts/0 00:00:00 grep --color=auto vim[root@localhost ~]# kill -3 7437 //-3看一下[root@localhost ~]# ps -ef |grep vim // 还是有root 7437 7220 0 10:32 pts/0 00:00:00 vim 1txtroot 7442 7220 0 10:32 pts/0 00:00:00 grep --color=auto vim[root@localhost ~]# kill -9 7437 //-9再看就没了[root@localhost ~]# ps -ef |grep vimroot 7444 7220 0 10:33 pts/0 00:00:00 grep --color=auto vim[1] Killed vim 1txt
# pkill 加服务名 全杀 不用指定PID[root@localhost ~]# vim /opt/nginx-1.20.2/conf/nginx.conf 搞10个[root@localhost ~]# ps -ef |grep nginxroot 7250 1 0 09:43 ? 00:00:00 nginx: master process nginxnobody 7571 7250 0 11:08 ? 00:00:00 nginx: worker processnobody 7572 7250 0 11:08 ? 00:00:00 nginx: worker processnobody 7573 7250 0 11:08 ? 00:00:00 nginx: worker processnobody 7574 7250 0 11:08 ? 00:00:00 nginx: worker processnobody 7575 7250 0 11:08 ? 00:00:00 nginx: worker processnobody 7576 7250 0 11:08 ? 00:00:00 nginx: worker processnobody 7577 7250 0 11:08 ? 00:00:00 nginx: worker processnobody 7578 7250 0 11:08 ? 00:00:00 nginx: worker processnobody 7579 7250 0 11:08 ? 00:00:00 nginx: worker processnobody 7580 7250 0 11:08 ? 00:00:00 nginx: worker processroot 7582 7220 0 11:08 pts/0 00:00:00 grep --color=auto nginx[root@localhost ~]# pkill nginx[root@localhost ~]# ps -ef |grep nginxroot 7586 7220 0 11:10 pts/0 00:00:00 grep --color=auto nginx
# killall 不常用 危险