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