Linux 程序和訊號

2021-06-09 17:35:54 字數 2477 閱讀 1833

1. 程序識別符號(pid)的取值範圍從2到32768,數字1是為特殊程序init保留的,init程序負責管理其他程序。

2. linux程序表就像乙個資料結構,它把當前載入在記憶體中的所有程序的相關資訊儲存在乙個表中,pid是程序表的索引。

3. $ ps -af

tty一列顯示了程序是從哪乙個終端啟動的。cmd一列顯示啟動程序所使用的命令。time一列是程序迄今所占用的cpu時間。-a選項檢視所有的程序。-f選項顯示程序完整的資訊。

4. $ ps -ax

執行狀態r表示程式已準備好執行,並不意味著它正在執行。

5. 程序排程:

可以用nice命令設定程序的nice值,使用renice命令調整它的值。nice命令的作用是將程序的nice值增加10,從而降低該程序的優先順序,可以使用ps命令的-l或-f選項檢視正在執行的程序的nice值,在ni一欄中。ppid一欄顯示的是父程序的程序id。

6. 庫函式system:

#include

執行引數字串形式的命令並等待該命令的完成。

7. exec函式系列:

乙個exec函式可以把當前程序替換為乙個新程序。執行中的程式從exec呼叫開始執行新的可執行檔案中的**。

8. fork函式:

#include

#include

新程序有自己的資料空間、環境和檔案描述符。fork和exec函式結合在一起使用就是建立新程序所需要的一切了。在父程序中的fork呼叫返回的是新的子程序的pid,子程序的fork呼叫返回的是0,如果fork失敗,返回-1。

pid_t new_pid;

new_pid = fork();

switch(new_pid) ;

9. wait系統呼叫:

#include

#include

返回子程序的pid。

int stat_val;

pid_t child_pid;

child_pid = wait(&stat_val);

10. 殭屍程序:

子程序終止時,它與父程序之間的關聯還會保持,直到父程序也正常地終止或父程序呼叫wait才告結束。因此,程序表中代表子程序的表項不會立刻釋放,退出碼需要儲存起來,子程序成為殭屍程序。

11. waitpid系統呼叫:

等待某個特定的程序的結束。

12. 訊號的名稱是在標頭檔案中定義的。

13. sigchld訊號:

子程序已經停止或退出,此訊號對管理子程序很有用,預設是被忽略的。其餘的訊號都會使接收它們的程序停止執行。

14. sigcount訊號:

讓程序恢復並繼續執行。

15. sigint訊號:

鍵盤敲入中斷字元ctrl+c組合鍵將會向前臺程序傳送sigint訊號,這將引起該程序終止。

16. kill命令:

如果想傳送乙個訊號給程序,而該程序並不是當前的前台程序,就需要使用kill命令。該命令需要乙個可選的訊號**或訊號名稱和乙個接收訊號的目標程序的pid。例如:向pid為512的程序傳送「結束通話」訊號:

kill -hup 512

17. killall命令:

傳送給不知道pid的某個程序或者傳送訊號給執行相同命令的許多不同的程序,例如:killall -hup inetd

18. signal庫函式:

準備捕獲或忽視的訊號由引數sig給出,接收到指定的訊號後將要呼叫的函式由引數func給出。訊號處理函式必須有乙個int型別的引數並且返回型別為void。func引數的兩個特殊值:sig_ign:忽略訊號;sig_dfl:恢復預設行為。

19. kill函式:

#include

#include

向包括它本身在內的其他程序傳送乙個訊號,把引數sig給定的訊號傳送給由引數pid給出的程序號所指定的程序。

20. alarm函式:

#include

通過呼叫alarm函式在經過預定時間後傳送乙個sigalrm訊號。

21. sigaction函式:

sa_mask欄位指定了乙個訊號集,在呼叫sa_handler所指向的訊號處理函式之前,該訊號集將被加入到程序的訊號遮蔽字中,這是一組被阻塞且不會傳遞給該程序的訊號,設定訊號遮蔽字可以防止前面看到的訊號在它的處理函式還未結束時就被接收到的情況,使用sa_mask欄位可以消除這一競態條件。

Linux 程序和訊號

pid 定義 程序識別符號 linux和unix一樣,有乙個虛擬記憶體系統,能夠把程式 和資料以記憶體頁面的形式放到硬碟的乙個區域中,所以linux可以管理的程序比物理記憶體所能容納的要多得多。程序表 linux程序表就像乙個資料結構,它把當前載入在記憶體中的所有程序的有關資訊儲存在乙個表中,其中包...

Linux程式設計 程序和訊號

程序的結構 型別和排程 可以把程序看做是正在執行的程式。程序結構 程序識別符號 檔案描述符 棧空間和環境變數 程式計數器 作業系統通過程序的 pid對它們進行管理,pid是程序表的索引。linux 排程器根據 程序的優先順序 來決定呼叫哪個程序。用不同的方法啟動新程序 system 函式作用 執行以...

Linux 程序訊號

概念 訊號是程序之間事件非同步通知的一種方式,屬於軟中斷。訊號處理常見方式 忽略此訊號。執行該訊號的預設處理動作。提供乙個訊號處理函式,要求核心在處理該訊號時切換到使用者態執行這個處理函式,這種方式稱為捕捉 catch 乙個訊號。產生訊號 捕捉訊號 核心如何實現訊號的捕捉 如果訊號的處理動作是使用者...