1. 程式人生 > >10.訊號signal

10.訊號signal

1.訊號由[核心]產生髮送的
2.訊號的狀態
	產生
	未決:未處理,等待被程序處理
	遞達:已經處理
3.處理方式
	忽略
	捕捉
	執行了預設的操作:man 7 signal
		Term  終止
		Ign   忽略
		Core  終止後,產生core檔案,用於除錯
		Stop  暫停
		Cont  繼續執行
4.
  訊號         值      動作   說明
  ─────────────────────────────────────────────────────────────────────
  SIGHUP        1       A     在控制終端上是掛起訊號, 或者控制程序結束
  SIGINT        2       A     從鍵盤輸入的<ctrl+C>,終止程序  **
  SIGQUIT       3       C     從鍵盤輸入的<ctrl+\>退出  **
  SIGILL        4       C     無效硬體指令
  SIGABRT       6       C     非正常終止, 可能來自 abort(3)  **
  SIGFPE        8       C     浮點運算例外
  SIGKILL       9      AEF    殺死程序訊號  **
  SIGSEGV      11       C     無效的記憶體引用  **
  SIGPIPE      13       A     管道中止: 寫入無人讀取的管道  **
  SIGALRM      14       A     來自 alarm(2) 的超時訊號  **
  SIGTERM      15       A     終止訊號
  SIGUSR1   30,10,16    A     使用者定義的訊號 1  **
  SIGUSR2   31,12,17    A     使用者定義的訊號 2  **
  SIGCHLD   20,17,18    B     子程序結束或停止  **
  SIGCONT   19,18,25          繼續停止的程序
  SIGSTOP   17,19,23   DEF    停止程序
  SIGTSTP   18,20,24    D     終端上發出的停止訊號
  SIGTTIN   21,21,26    D     後臺程序試圖從控制終端(tty)輸入
  SIGTTOU   22,22,27    D     後臺程序試圖在控制終端(tty)輸出
5.概念:阻塞訊號集/未決訊號集
PCB
不能直接操作
阻塞訊號集:要遮蔽的訊號
未決訊號集:沒有被處理的訊號的集合

2.訊號相關函式

1.kill--傳送訊號給指定程序:int kill(pid_t pid, int sig);
	pid>0:發訊號給指定的程序
	pid=0:呼叫kill函式的程序的(同一組的所有程序)
	pid<-1:取|pid|發給對應程序組
	pid=-1:傳送給程序有許可權傳送的系統中所有程序
	
2.raise--自己給自己發訊號:int raise(int sig);
	等價於:kill(getpid(),int sig);

3.abort--給自己傳送異常終止訊號SIGABRT
	在哪個程序中呼叫abort函式,哪個程序就會終止,併發送SIGABRT訊號

4.alarm--設定定時器SIGALRM   unsigned alarm(unsigned seconds);
	當時間到達之後,alarm函式發出SIGALRM訊號