2015年1月25日 星期日

busybox halt, poweroff, reboot

指令 halt、poweroff、跟 reboot 的動作過程類似,都是 kill 1 號行程,一般是 init,在 OpenWrt 是 procd。1 號行程會去執行 inittab 的 shutdown 動作後,呼叫函式庫函式 reboot()。reboot() 再執行系統呼叫進到 kernel 執行 sys_reboot() ,去做相關動作。

signal to kill initreboot() 參數kernel動作
haltSIGUSR1RB_HALT_SYSTEM (0xcdef0123)kernel_halt()停止所有程式
poweroffSIGUSR2RB_POWER_OFF (0x4321fedc)kernel_power_off()停止所有程式後關電 (關電未必有實作)
rebootSIGTERMRB_AUTOBOOT (0x01234567)kernel_restart()停止所有程式後再開機

如果下這些指令加 -f 參數的話,就直接執行 reboot(),不做 inittab 的 shutdown 動作。

參考來源:busybox init/halt.c 及 Linux kernel 原始碼

延伸閱讀

沒有留言:

張貼留言

SIP header Via

所有 SIP 訊息 都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。 格式 sent-protocol sent-by [ ;branch= branch ][ ; 參數 ...] s...