RHEL6系统进程管理之四进程管理kill命令

我们就来看看RHEL6系统进程的管理了
我们知道,一般程序本身都会带自身的管理程序,如关闭、重新启动。除了自带的,我们也可以通过发信号的方式来告诉程序需要做什么,这就是下面我们要介绍的内容。

先来了解一下几个常用的信号

[root@yufei ~]# 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系统中有这么多的信号,我们不用管他,只要来了解几个常用的就OK了,如果想仔细的研究的朋友,请到网上找相应的内容,或者是查看signal的帮助(man 7 signal 如果没有此命令,请安装man-pages软件包)。

1 SIGHUP 启动被终止的程序,可让该 PID 重新读取自己的配置文件,类似重新启动

2 SIGINT 相当于用键盘输入 ctrl+c 来中断一个程序

9 SIGKILL 代表强制停止一个程序的进行,如果该程序进行到一半, 那么尚未完成的部分可能会有『半产品』产生,类似 vim会有 .filename.swp 保留下来

15 SIGTERM 以正常的结束程序来终止该程序。由于是正常的终止,所以后续的动作会将他完成。不过,如果该程序已经发生问题,就是无法使用正常的方法终止时, 输入这个 signal 也是没有用的。

17 SIGSTOP 相当于用键盘输入 ctrl+z 来暂停一个程序

上面的数字是信号代码,而SIG*就是信号,这两个是等同的哦。

进程管理命令kill,killall,pkill,xkill详解
那么我们如何传送一个信号给某个进程呢?就要通过 kill 、killall、pkill、xkill了。下面就来看看他们是如何使用的。

kill的应用是和ps 或pgrep 命令结合在一起使用的;

kill 的用法:

kill [信号][信号代码]  进程ID

注意:信号或信号代码只要用一个就OK了。

如 

[root@yufei ~]# ps auxf |grep httpd
root      3890  0.0  0.3 103228  864 pts/0    S+  22:25  0:00          \_ grep httpd
root      3879  0.5  4.1 281892 10220 ?        Ss  22:25  0:00 /usr/sbin/httpd
apache    3881  0.0  2.2 281892  5548 ?        S    22:25  0:00  \_ /usr/sbin/httpd
apache    3882  0.0  2.2 281892  5548 ?        S    22:25  0:00  \_ /usr/sbin/httpd
apache    3883  0.0  2.2 281892  5548 ?        S    22:25  0:00  \_ /usr/sbin/httpd
apache    3884  0.0  2.2 281892  5548 ?        S    22:25  0:00  \_ /usr/sbin/httpd
apache    3885  0.0  2.2 281892  5548 ?        S    22:25  0:00  \_ /usr/sbin/httpd
apache    3886  0.0  2.2 281892  5548 ?        S    22:25  0:00  \_ /usr/sbin/httpd
apache    3887  0.0  2.2 281892  5548 ?        S    22:25  0:00  \_ /usr/sbin/httpd
apache    3888  0.0  2.2 281892  5548 ?        S    22:25  0:00  \_ /usr/sbin/httpd

第二列就是进程的ID了,而3879 我们可以明显的看出来他是httpd服务器的父进程,从3881到3888是httpd服务器的子进程了,如果杀死子进程,只是针对自己起作用。 

[root@yufei ~]#  kill -15 3888
[root@yufei ~]# ps auxf |grep httpd
root      3893  0.0  0.3 103228  864 pts/0    S+  22:28  0:00          \_ grep httpd
root      3879  0.0  4.1 281892 10220 ?        Ss  22:25  0:00 /usr/sbin/httpd
apache    3881  0.0  2.2 281892  5548 ?        S    22:25  0:00  \_ /usr/sbin/httpd
apache    3882  0.0  2.2 281892  5548 ?        S    22:25  0:00  \_ /usr/sbin/httpd
apache    3883  0.0  2.2 281892  5548 ?        S    22:25  0:00  \_ /usr/sbin/httpd
apache    3884  0.0  2.2 281892  5548 ?        S    22:25  0:00  \_ /usr/sbin/httpd
apache    3885  0.0  2.2 281892  5548 ?        S    22:25  0:00  \_ /usr/sbin/httpd
apache    3886  0.0  2.2 281892  5548 ?        S    22:25  0:00  \_ /usr/sbin/httpd
apache    3887  0.0  2.2 281892  5548 ?        S    22:25  0:00  \_ /usr/sbin/httpd

3888这个进程没有了

而如果杀死父进程,那么所有的子进程也就完了

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/20952.html