USR1亦通常被用来告知应用程序重载配置文件;例如,向Apache HTTP服务器发送一个USR1信号将导致以下步骤的发生:停止接受新的连接,等待当前连接停止,重新载入配置文件,重新打开日志文件,重启服务器,从而实现相对平滑的不关机的更改。
kill -HUP pid 或者 killall -HUP pName:
其中pid是进程标识,pName是进程的名称
如果想要更改配置而不需停止并重新启动服务,可以使用上面两个命令。在对配置文件作必要的更改后,发出该命令以动态更新服务配置。
根据约定,当你发送一个挂起信号(信号1或HUP)时,大多数服务器进程(所有常用的进程)都会进行复位操作并重新加载它们的配置文件。
其中 pid 是进程标识。如果想要更改配置而不需停止并重新启动服务,请使用该命令。在对配置文件作必要的更改后,发出该命令以动态更新服务配置。
[root@localhost httpd-2.2.13]# ps -A | grep httpd | grep -v grep | awk '{ print $1; }' | xargs -L 1 kill -HUP
上面的命令中包含了很多的操作,所以让我们来仔细地看一下管道的每个部分。ps 和 grep 命令用来在所有的进程中搜索 httpd(并且忽略用来搜索 httpd 进程的 grep 进程)。接下来,awk 只显示输出结果中的进程 ID,并将它传递给 xargs。然后,xargs 命令接受每个进程 ID(因为使用了 -L 1 以便一次提取一行内容),并使用kill -HUP 向相应的进程发送一个挂起信号。
现有连接自己不会断,因为kill -HUP `cat /var/run/sshd.pid` 只是HUP监听的那个,已经建立的连接(不同的 pid)不会断。
然后你在现有账号下面exit,在用新的端口登陆就可以了。
我需要的信息是:
【killall命令,和kill命令一样,其作用是给指定的进程发送一个信号过去,不是平常所理解的仅仅是结束一个进程
SIGHUP(1):对于没有那些不与终端交互的守护进程(Deamon Process),通常的设计是在接收到SIGHUP信号之后就会重新读取配置文件。】
命令现在一个终端中开启一个dd进程
dd if=/dev/zero of=/data3/test bs=1k count=1024000然后在另外一个终端中用while来反复执行killall命令
while killall -USR1 dd; do sleep 5; done然后就能看到间隔5秒一次的输出结果了
292289+0 records in
292288+0 records out
541861+0 records in
541860+0 records out
760037+0 records in
760036+0 records out
886602+0 records in
886601+0 records out
1007881+0 records in
1007880+0 records out
1024000+0 records in
1024000+0 records out所执行的killall命令循环会在dd命令执行结束之后退出。
说明
可能不熟悉linux的人会问了,为什么dd命令的进度输出要killall命令来激发呢?其实答案很简单,dd的进度输出就是这么设计的,再详细
点就是dd命令在执行的时候接收到SIGUSR1信号的输出当前的读写进度,而killall命令在这里起的作用就是给dd进程发送这个信号。killall命令,和kill命令一样,其作用是给指定的进程发送一个信号过去,不是平常所理解的仅仅是结束一个进程。
所以上面的”while killall -USR1 dd; do sleep 5; done”就是每隔5秒就给所有的dd命令进程发送一个USR1信号,dd命令进程接收到信号之后就打印出自己当前的进度。
因为kill命令能传递的信号不仅仅是SIGTERM(kill pid)和SIGKILL(kill -9
# 当你对smb.conf修改之后,运行下面的命令,修改就能生效了
pid),还有很多其他的信号值,在这里面还有一个很经常用的就是SIGHUP(1)了,对于没有那些不与终端交互的守护进程(Deamon
Process),通常的设计是在接收到SIGHUP信号之后就会重新读取配置文件。比如下面的
# 而不用再来一个smb restart
killall -HUP smbd