[-F] 在重啟計算機(reboot)時強迫 fsck。
[-time] 設定關機(shutdown)前的時間。
所以,對大多數關不了機的回答就是用shutdown -h 命令。
2.halt 是最簡單的關機命令
其實 halt 就是調用 shutdown -h。halt 執行時,殺死非基本的進程,執行 sync 系統調用,文件系統寫操作完成後就會停止內核。
參數說明:
[-n] 防止 sync 系統調用,它用在用fsck修補根分區之後,以阻止內核用老版本的超級塊(superblock)覆蓋修補過的超級塊。
[-w] 並不是真正的重啟或關機,只是寫 wtmp(/var/log/wtmp)紀錄。
[-d] 不寫 wtmp 紀錄(已包含在選項 [-n] 中)。
[-f] 沒有調用 shutdown 而強制關機或重啟。
[-i] 關機(或重啟)前,關掉所有的網絡接口。
[-p] 該選項為缺省選項。就是關機時調用 poweroff。
3.reboot 差不多跟 halt 一樣,不過它是引發主機重啟,而 halt 是關機。關於它的參數,因為和 halt 差不多,這裡就略去不解。
4.init 是所有進程的祖先,它的進程號始終為 1,所以發送 TERM 信號給 init 會終止所有的用戶進程、守護進程等。shutdown 就是使用這種機制。init 定義了 8 個 runlevel,init 0 為關機,init 1 為重啟。關於 init 可以長篇大論,這裡就不再敘述。另外還有 telinit 命令可以改變 init 的運行級別,比如,telinit -iS 可使系統進入單用戶模式,並且得不到使用 shutdown 時的信息和等待時間。感興趣的讀者可以查閱手冊(The best is the man)。
二、關於kill
許多初學者想用kill殺死某些進程,可是結果是被殺進程還是顯示在 ps 命令的結果中,也就是該進程並沒有被殺死。
談到 kill,當然就不能避免關於信號的討論。信號就是軟件中斷,大多數程序都用信號來發生中斷,比如,ping 命令可用 Ctrl+C 產生的信號發生中斷。當一個進程接受到一個信號時,可能發生以下情況:如果該進程已指定了對該信號的處理例程,內核就調用該例程,然後進行必要的處理;如果沒有指定處理方式,內核就采用缺省的行為。當用戶鍵入 Ctrl+C 時,終端驅動程序接受該字符後,向活動進程發出 SIGINT (終端中斷符)信號。而對該信號的缺省處理就是終止,所以上面的命令 ping 就會終止,否則會無休止地運行下去。關於信號的權威著作是W.Richard Stevens的《UNIX 環境高級編程》,感興趣的讀者可參閱。本文僅說明其中的個別信號,信號名均以 SIG 開頭,故有的地方將其省略。
1.捕獲信號:給該信號指定一個具體的處理例程。例如,捕獲到 CHLD 信號說明子進程已經終止,系統將調用 waitpid 函數以獲取該子進程的 id 和終止信號。
2.忽略信號:防止信號的到達,程序可以請求忽略或阻塞它們。忽略就是被丟棄,而阻塞是排隊等待處理。
3.SIGKILL 和 SIGSTOP 信號:不能被捕獲、忽略、阻塞,這是為了保證系統管理員的權限,使他們有可靠的方法實現終止進程的目的。
因為不帶信號值的 kill 命令不能保證目標進程的消亡,即 TERM 信號被捕獲、忽略、阻塞,所以會產生上面的疑問,現在知道了 kill 信號就不用擔心了,kill -9 pid 就可以解決問題了。
三、關於 Linux 的目錄組織
經常有網友問及 linux 的內核在哪兒,還有很多人記得不太清楚,要經常查找。下面列出標准的目錄含有的內容供查閱。
/ 根目錄
/bin 系統最小命令集(/sbin 為系 統管理員所用)
/dev 設備文件目錄
/etc 關鍵的啟動文件和配置文件
/home 用戶主目錄
/lib C編譯器的例程庫
/mnt 掛用其它文件系統的目錄
/proc 所有運行中進程的映像
/root root用戶根目錄
/tmp 每次重啟均會消失的臨時文件
/usr/bin 可執行文件
/usr/doc linux How-to
/usr/etc 系統維護命令
/usr/games 游戲,一樣很精彩
/usr/include C 程序頭文件
/usr/info 版本信息
/usr/lib 標准的 UNIX 程序支持文件
/usr/local 本地目錄
/usr/man 在線手冊
/usr/src 源文件目錄