2015-10-16 112 views
0

我一直在試圖理解這段代碼,但是我無法得到它的全部內容。我知道'init'是第一個啓動過程,並且該程序用於啓動或結束特定的服務。但是'kill'中的'cat'會做什麼?當這個程序啓動,停止和重新啓動時,系統內部發生了什麼?shell腳本中的初始化程序

#!/bin/sh 
test -f /usr/sbin/sshd || exit 0 
case "$1" in 
start) 
echo -n "Starting sshd: sshd" 
/usr/sbin/sshd 
echo "." 
;; 
stop) 
echo -n "Stopping sshd: sshd" 
kill `cat /var/run/sshd.pid` 
echo "." 
;; 
restart) 
echo -n "Stopping sshd: sshd" 
kill `cat /var/run/sshd.pid` 
echo "." 
echo -n "Starting sshd: sshd" 
/usr/sbin/sshd 
echo "." 
;; 
*) 
echo "Usage: /etc/init.d/sshd start|stop|restart" 
exit 1 
;; 
esac 
+0

我想你已經混淆了'init'進程和啓動服務的'init.d'腳本。我可能有 –

+0

。你能解釋一下我的代碼嗎? –

+0

這只是一個普通的shell腳本。你只需要閱讀它看看它是什麼。如果你不知道「貓」或「殺」是什麼,那麼我建議你看看他們的手冊頁。那個init腳本(init.d中的服務啓動腳本被稱爲「init腳本」,這可能讓你感到困惑)是'sshd'服務/守護進程的腳本。 'init'進程/程序也有一個手冊頁。 –

回答

0

如果是在UNIX操作系統啓動時它會運行/etc/init.d下所有的腳本,這其中之一,有「開始」的說法。該腳本然後調用/ usr/sbin/sshd,它分叉後臺進程並終止。後臺進程將再次分叉,其子將成爲惡魔進程。惡魔進程將其PID寫入/var/run/sshd.pid並開始服務。在OS關閉後,該腳本將再次以「stop」參數被調用。它會從文件中收集惡魔的PID,並優雅地終止它(沒有切換kill會發送SIGTERM,就好像'kill -15 $ pid'一樣)。

+0

'它會運行/ etc/init.d'中的所有腳本 - 這不完全正確。 '/ etc/init.d'中有許多腳本,它們只能根據'runlevel'(現在是'systemd target')運行。在舊的init腳本啓動下運行的是由'/ etc/init.d/rcS.d /'中的軟鏈接確定的,然後是'/etc/init.d/rc [0-6] .d /'任何給定的運行級別[0-6]'。 '/ etc/init.d /'中還有其他腳本用於安裝軟件包,但未配置爲在引導時運行。 –