16.3.2
½程的管理
½程之间是可以互相控制的!举例来说,你可以关闭、重新启动服务器软件,服务器软件本身是个½
程,
你既然可以让她关闭或启动,当然就是可以控制该½程啦!
那么½程是如何互相管理的呢?其
实是透过给予该½程一个讯号
(signal)
去告知该½程你想要让她作什么!
因此这个讯号就很重要啦!
我们也在本章之前的
bash
工作管理
当中提到过,
要给予某个已经存在背景中的工作某些动作时,是
直½给予一个讯号给该工作号码即可。那么到底有多少
signal
呢?
你可以使用
kill -l (
小写的
L )
或者是
man 7 signal
都可以查询到!主要的讯号代号与名称对应及内容是:
代
号
名称
内容
1
SIGHUP
启动被终止的½程,可让该
PID
重新读取自己的配置文件,类似重新启动
2
SIGINT
相当于用键盘输入
[ctrl]
-
c
来中断一个½程的½行
9
SIGKILL
代表强制中断一个½程的½行,如果该½程½行到一半,
那么尚未完成的部分可能会有『半产
品』产生,类似
vim
会有
.filename.swp
保留下来。
15
SIGTERM
以正常的½束½程来终止该½程。由于是正常的终止,
所以后续的动作会½他完成。不过,如
果该½程已经发生问题,就是无法使用正常的方法终止时,
输入这个
signal
也是没有用的。
19
SIGSTOP
相当于用键盘输入
[ctrl]
-
z
来暂停一个½程的½行
上面½是常见的
signal
而已,更多的讯号信息请自行
man 7 signal
吧!一般来说,你只要记得『
1, 9,
15
』这三个号码的意义即可。那么我们如何传送一个讯号给某个½程呢?就透过
kill
或
killall
吧!
底下分别来看看:
.
kill -signal PID
kill
可以帮我们½这个
signal
传送给某个工作
(%jobnumber)
或者是某个
PID (
直½输入数字
)
。
要
再次强调的是:
kill
后面直½加数字与加上
%number
的情况是不同的
!
这个很重要喔!因为工作
控制中有
1
号工作,但是
PID 1
号则是专指『
systemd
』这支程序!你怎么可以½
systemd
关闭
呢?
关闭
systemd
,你的系统就当掉了啊!所以记得那个
%
是专门用在工作控制的喔!
我们就
活用一下
kill
与刚刚上面提到的
ps
来做个简单的练习吧!
例题:
以
ps
找出
rsyslogd
这个½程的
PID
后,再使用
kill
传送讯息,使得
rsyslogd
可以重新读取配置文件。
答:
由于需要重新读取配置文件,因此
signal
是
1
号。至于找出
rsyslogd
的
PID
可以是这样做:
ps aux | grep 'rsyslogd' | grep
-
v 'grep'| awk '{print $2}'
½下来则是实际使用
kill
-
1 PID
,因此,整串指令会是这样:
kill
-
SIGHUP $(ps aux | grep
'rsyslogd' | grep
-
v 'grep'| awk '{print $2}')
如果要确认有没有重新启动
syslog
,可以参考登录档的内容,使用如下指令查阅:
tail
-
5 /var/log/messages