echo Impossible|sed 's/Im/To be /'

November 14, 2009

[tip] Linux - What to do when CTRL-ALT-DEL is pressed.

某個非常要好的朋友打電話來問了這個問題。他想知道在各個不同的 Linux 發行版本在 x86 上針對 keyboard 按下 CTRL-ALT-DEL 會作出什麼樣的反應。可不可以正常的關掉 某個正在執行的 service,確保資料不會遺失。

事實上一般狀況下,kernel 收到了 keyboard 所發出來的 CTRL-ALT-DEL 會轉發 個信號給 init ,通知 init 收到使用者按下了 CTRL-ALT-DEL 這個組合 keys。 init 會根據開機時 /etc/inittab 的內容來執行 CTRL-ALT-DEL 所付與的指令。

Debian GNU/Linux 關於 CTRL-ALT-DEL 在 /etc/inittab 的內容如下:

110碼:AAA2369 $> cat /etc/inittab | nl | grep -i ctrl
    26  # What to do when CTRL-ALT-DEL is pressed.
    27  ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
110碼:AAA2369 $>

這也就是說按下 CTRL-ALT-DEL 就等同執行 "shutdown -t1 -a -r now" 。 它一但被執行,系統則進入 "init runlevel 6" 程序。想正常的關掉 某個正在執行的 service,只需加個停掉的 script 在 runlevel 6 就可以了。

PS: kernel 有個 proc 選項可以開關控制 CTRL-ALT-DEL 這個行為。

110碼:AAA2369 #> whoami
root
110碼:AAA2369 #> cat /proc/sys/kernel/ctrl-alt-del
0
110碼:AAA2369 #> echo 1 > /proc/sys/kernel/ctrl-alt-del
110碼:AAA2369 #> cat /proc/sys/kernel/ctrl-alt-del
1

PS1: 更改 /etc/inittab 沒通知 init reload /etc/inittab,是不會起作用的。 reload 的命令如下:

110碼:AAA2369 #> init q