1. 程式人生 > >Linux下訊號詳解

Linux下訊號詳解

訊號:當我們按下Ctrl+'C' /"D"/"\"/"Z"等組合鍵時,程序為什麼會停止下來,實際上是我們給程序發出了訊號,例如,我們在除錯的過程中,程式異常終止時,常常會受到SIGSEGV訊號,那麼核心是如何來管理這些訊號的呢?


當有訊號產生時,程序PCB會維護兩個訊號集,未決訊號集和阻塞訊號集。會將產生的訊號對應的整數位設定為1,然後通過與BLOCK訊號集的具體位作比較,當發現該訊號位

阻塞時,這時訊號處於未決狀態,否則,會執行系統相關的訊號處理動作。

#include <signal.h>
#include <stdio.h>


void print_sigset(sigset_t* s)
{
	int i = 0;

	for(i = 1;i<=32;i++)
	{
		if(1 == sigismember(s,i))
			putchar('1');
		else
			putchar('0');
	}

}

int main()
{
	sigset_t set;

	sigemptyset(&set);
	sigaddset(&set,SIGINT);
	sigprocmask(SIG_SETMASK,&set,NULL);

	while(1)
	{
		if(0 == sigpending(&set))
			print_sigset(&set);
	}
	return 0;
}