Linux循序漸進(14):進程調度

火星人 @ 2014-03-09 , reply:0
←手機掃碼閱讀


  第十三課 進程調度

  kill命令

  當需要中斷一個前台進程的時候,通常是使用組合鍵;但是對於一個後台進程恐怕就不是一個組合鍵所能解決的了,這時就求助於kill命令.該命令可以終止後台進程.至於終止後台進程的原因很多,或許是該進程佔用的CPU時間過多;或許是該進程已經掛死.總之這種情況是經常發生的.

  kill命令是通過向進程發送指定的信號來結束進程的.如果沒有指定發送信號,那麼默認值為TERM信號.TERM信號將終止所有不能捕獲該信號的進程.至於那些可以捕獲該信號的進程可能就需要使用kill(9)信號了,該信號是不能被捕捉的.

  kill命令的語法格式很簡單,大致有以下兩種方式:

  kill [-s 信號 | -p ] [ -a ] 進程號 ...

  kill -l [信號]

  -s 指定需要送出的信號.既可以是信號名也可以對應數字.

  -p 指定kill命令只是顯示進程的pid,並不真正送出結束信號.

  -l 顯示信號名稱列表,這也可以在/usr/include/linux/signal.h文件中找到.

  kill命令的使用

  下面看看該命令的使用.

  [例24] 在執行一條find指令時時間過長,決定終止該進程.

  應該使用ps命令來查看該進程對應的PID,鍵入ps,顯示如下:

  PID TTY TIME COMMAND

  285 1 00:00:00 -bash

  287 3 00:00:00 -bash

  289 5 00:00:00 /sbin/mingetty tty5

  290 6 00:00:00 /sbin/mingetty tty6

  312 3 00:00:00 telnet bbs3

  341 4 00:00:00 /sbin/mingetty tty4

  345 1 00:00:00 find / -name foxy.jpg

  348 1 00:00:00 ps

  可以看到該進程對應的PID是345,現在使用kill命令來終止該進程.鍵入:



  # kill 345

  再用ps命令查看,就可以看到,find進程已經被殺掉了.
 
  [例25] 殺掉進程11721

  # ps

  PID TTY TIME COMMAND

  11668 p1 00:00:00 -tcsh

  11721 p1 00:00:00 cat

  11737 p1 00:00:00 ps

  # kill 11721

  [1] Terminated cat

  #

  有時候可能會遇到這樣的情況,某個進程已經掛死或閑置,使用kill命令卻殺不掉.這時候就發送信號9,強行關閉此進程.當然這種「野蠻」的方法很可能會導致打開的文件出現錯誤或者數據丟失之類的錯誤.不到萬不得已不要使用強制結束的辦法.如果連信號9都不響應,那恐怕就只有重新啟動計算機了.

  控制多個進程命令

  Linux可使用戶同時運行多個進程,還允許用戶或系統管理員能控制正在運行的進程.

  nohup命令

  理論上,我們一般退出Linux系統時,會把所有的程序全部結束掉,包括那些後台程序.但有時候,例如您正在編輯一個很長的程序,但是您下班或是有事需要先退出系統,這時您又不希望系統把您編輯那麼久的程序結束掉,希望退出系統時,程序還能繼續執行.這時,我們就可以使用nohup命令使進程在用戶退出后仍繼續執行.

  一般這些進程我們都是讓它在後台執行,結果則會寫到用戶自己的目錄下的nohup.out這個文件里(也可以使用輸出重定向,讓它輸出到一個特定的文件).[例26]

  $ nohup sort sales.dat &

  這條命令告訴sort命令忽略用戶已退出系統,它應該一直運行,直到進程完成.利用這種方法,可以啟動一個要運行幾天甚至幾周的進程,在它運行時,用戶不需要去登錄.

  nohup命令把一條命令的所有輸出和錯誤信息送到nohup.out文件中.若將輸出重定向,則只有錯誤信息放在nohup.out文件中.



  renice命令

  renice命令允許用戶修改一個正在運行進程的優先權.

  利用renice命令可以在命令執行時調整其優先權.其格式如下:

  $ renice -number PID

  其中,參數number與nice命令的number意義相同.

  註:

  (1) 用戶只能對自己所有的進程使用renice命令.

  (2) root用戶可以在任何進程上使用renice命令.

  (3) 只有root用戶才能提高進程的優先權.

  思 考 題

  1. 什麼是進程?進程與作業有何區別?

  2. 進程啟動的方式有哪幾種?

  3. at命令與batch命令有何本質區別?

  4. cron命令在何時執行?如何改變其執行狀態?

  5. 何謂前台作業、後台作業?如何掛起當前的前台作業?如果要恢復其運行又如何做?

  6. 進程的查看命令有哪些?各有什麼不同?

  7. 如何中斷一個後台進程?

  8. 如何在用戶退出Linux系統時,使一個進程仍然能繼續執行?

  9. 如何修改一個作業的優先權?

  10. 編寫和檢驗完成下列各項功能的命令管道行:

  (1)顯示當前系統中的登錄名的數目.

  (2)顯示當前系統中有多少個進程.

  11. 說明下列管道行分別完成什麼功能:

  (1)df -a | wc -l

  (2)who | wc -






[火星人 via ] Linux循序漸進(14):進程調度已經有196次圍觀

http://www.coctec.com/docs/linux/show-post-57606.html