被中斷的系統呼叫

2021-09-17 20:56:16 字數 1169 閱讀 8282

我們知道系統呼叫一旦阻塞,當訊號到來是會中斷此系統呼叫執行的,但是如下情況是不會對系統呼叫產生影響:

1.單個程序阻塞訊號不會對後續系統呼叫產生中斷行為。

2.執行緒中通過pthread_sigmask阻塞訊號後,對該程序傳送的訊號是不影響該執行緒的系統呼叫的,會被傳送到其他執行緒處理。

對於阻塞的訊號,相當於是延後處理,改為unblock後,會立即觸發訊號行為。如果一直處於阻塞狀態,那麼相當於忽略。

多執行緒的示例如下:

#include #include #include #include #include #include #include #include #include #include #include "include/debug.h"

void *thr_fn(void *arg)

switch (signo)

} return(0);

}pthread_t setup_signal_thread(void)

int main()

測試結果:

xiehaocheng@xiehaocheng:~/work/qemu/sdk/test/linuxc$ ./syscall_intr 

^c[604] info: catch sigint; exiting

^c[604] info: catch sigint; exiting

^c[604] info: catch sigint; exiting

^c[604] info: catch sigint; exiting

^c[604] info: catch sigint; exiting

^c[604] info: catch sigint; exiting

^c[604] info: catch sigint; exiting

^c[604] info: catch sigint; exiting

^c[604] info: catch sigint; exiting

^c[604] info: catch sigint; exiting

^c[604] info: catch sigint; exiting

^c[604] info: catch sigint; exiting

可被中斷的系統呼叫

早期的unix系統,如果程序在乙個 慢 系統呼叫中阻塞時,捕獲到乙個訊號,這個系統呼叫被中斷,呼叫返回錯誤,設定errno為eintr。這表明,不是這個系統呼叫錯出了,而是被中斷了,需要再次啟動。系統呼叫被分為慢系統呼叫和其他兩大類別。慢系統呼叫可以被永久阻塞,包括以下幾個類別 1 讀寫 慢 裝置 ...

中斷 異常 系統呼叫

還是之前計算機只能乙個乙個的處理作業,cpu資源利用率低下,為了解決這個問題,人們發明了作業系統,引入中斷機制,實現了多道程式併發執行。本質 發生中斷就意味著需要作業系統的介入,開展管理工作。當中斷發生時,cpu立即進入核心態 當中斷發生後,當前執行的程序暫停執行,並由作業系統核心對中斷進行處理。對...

中斷與系統呼叫

系統呼叫的概念 程式設計師或系統管理員通常並非直接和系統呼叫打交道,在實際應用中,程式設計師呼叫的的函式,或稱為應用程式介面 api 管理員使用的則是更高層次的系統命令。作業系統為每個系統呼叫在標準c函式庫中構造乙個具有相同名字的封裝函式,由它來遮蔽下層的複雜性,負責把作業系統提供的服務介面 系統呼...