LINUX程式如何管理控制(二)

roc_guo發表於2022-07-21

上篇文章詳細介紹了詳細介紹了靜態檢視ps命令和動態檢視top命令,關於程式的介紹還有如何控制程式(中斷、停止等),將在這篇文章一一展開描述!

先提出一個疑問:我們可以透過靜態檢視ps命令和動態檢視top命令檢視和監測程式,那我們如何得到對它們的控制權呢?

接下來我們使用一個叫做 的小程式做個實驗:

首先,我們先執行xlogo命令:

[root@ probe ~]$ xlogo

// xlogo 程式僅顯示一個大小可調的包含X 標誌的視窗,其屬於X 視窗系統(使圖形介面顯示在螢幕上的底層引擎)提供的示例程式。

命令執行片刻,在螢幕的某個位置就會出現一個包含X 標誌的小視窗。

在此,學友們就會提出為什麼shell 提示符還沒有返回結果呢?原因在於shell 正在等待這個程式結束,一旦我們關閉xlogo 視窗,shell 提示符就返回結果了。

中斷程式

執行xlogo 命令,透過調整視窗大小,證實這個程式正在執行。接下來,回到終端視窗,按下Ctrl-c,會得出如下結果:

[root@linuxprobe~]$ xlogo

[root@linuxprobe~]$

shell 提示符返回意味著輸入Ctrl-c,將會中斷程式,xlogo 視窗關閉。在linux系統中,你可以透過Ctrl-c,許多(但不是全部)命令列程式都可以被中斷。

停止程式

在某種情況下,我們只是想要停止一個程式,而不是終止它,那麼可以使用Ctrl-z,即可停止前臺程式,並轉為後臺。舉例:

在命令提示符下,執行xlogo命令,然後輸入Ctrl-z:

[root@linuxprobe~]$ xlogo

[1]+ Stopped xlogo

[root@linuxprobe~]$

使用fg 命令,可以恢復程式到前臺執行,或者用bg 命令把程式移到後臺。

[root@linuxprobe~]$ bg %1

[1]+ xlogo &

[root@linuxprobe~]$

在使用Ctrl-c 和Ctrl-z 的執行過程中我們可以清晰地看到訊號的實際用法。當終端接受了一個按鍵組合後,它就會給在前端執行的命令程式傳送一個訊號。

Ctrl-c 和Ctrl-z 的執行過程會有所不同,使用Ctrl-c,它會傳送一個叫做INT(Interrupt, 中斷)的訊號;當使用Ctrl-z 時,它則會傳送一個叫做TSTP(Terminal Stop,終端停止)的訊號。監聽訊號的到來,當程式接到訊號之後,則做出相應響應。

使用kill 命令給程式傳送訊號

語法形式:kill [-signal] PID...

編號

名字

含義

1

HUP

掛起(Hangup)。這個訊號被用來告訴程式,控制的終端機已經“結束通話”。透過關閉一個終端會話,可以展示這個訊號的作用。在當前終端執行的前臺程式將會收到這個訊號並終止。許多守護程式也使用這個訊號,來重新初始化。

這意味著,當一個守護程式收到這個訊號後,這個程式會重新啟動,並且重新讀取它的配置檔案。Apache網路伺服器守護程式就是一個例子。

2

INT

中斷。實現和Ctrl-c一樣的功能,由終端傳送。通常,它會終止一個程式。

9

KILL

殺死。KILL 訊號從不被髮送到目標程式,而是核心立即終止這個程式。當一個程式以這種方式終止的時候,它沒有機會去做些“清理”工作,或者是儲存工作。

鑑於以上原因,當其它終止訊號失敗後,再使用它。

15

TERM

終止。這是kill 命令傳送的預設訊號。如果程式仍然“活著”,可以接受訊號,那麼這個它會終止。

18

CONT

繼續。在一個停止訊號後,這個訊號會恢復程式的執行。

19

STOP

停止。這個訊號導致程式停止執行,而不是終止。像KILL 訊號,它不被髮送到目標程式,因此它不能被忽略。

如果在命令引數中並沒有指定訊號,那麼預設情況下,他會傳送TERM(Terminate,終止)訊號。

[root@linuxprobe~]$ xlogo 1] 13601

[root@linuxprobe~]$ kill -INT 13601

[1]+ Interrupt            xlogo

[root@linuxprobe~]$ xlogo &

[1] 13608

[root@linuxprobe~]$ kill -SIGINT 13608

[1]+ Interrupt            xlogo

 

使用killall 命令給多個程式傳送訊號

語法形式:killall [-u user] [-signal] naroot...

[root@linuxprobe~]$ xlogo &

[1]         18801

[root@linuxprobe~]$ xlogo &

[2]         18802

[root@linuxprobe~]$ killall xlogo

[1]- Terminated            xlogo

[2]+ Terminated            xlogo

 

需要提醒的是:killall命令和kill 命令一樣,必須擁有超級使用者許可權才能給不屬於它的程式傳送訊號。

監測程式是一個很重要的系統管理任務,所以有更多和程式相關的命令與它相關。在此做個簡單的統計,詳細見下表:

命令名稱

命令描述

pstree

輸出一個樹型結構的程式列表(processtree),這個列表展示了程式間父/子關係。

vmstat

輸出一個系統資源使用快照,包括記憶體,交換分割槽和磁碟I/O。為了看到連續的顯示結果,則在命令名後加上更新操作延時的時間(以秒為單位)。例如,“vmstat 5”。,按下Ctrl-c組合鍵, 終止輸出。

xload

一個圖形介面程式,可以畫出系統負載隨時間變化的圖形。

tload

terminal load 與xload 程式相似,但是在終端中畫出圖形。使用Ctrl-c,來終止輸出。

更多關於程式的介紹及實驗,請移步 ,這本書籍所附實驗程式碼及例項會助你一臂之力,將是linux學習過程的很好的伴侶!


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2906901/,如需轉載,請註明出處,否則將追究法律責任。

相關文章