作者 主題: 想請問一下SIGNAL的問題  (閱讀 3766 次)

0 會員 與 1 訪客 正在閱讀本文。

f905201

  • 可愛的小學生
  • *
  • 文章數: 8
    • 檢視個人資料
想請問一下SIGNAL的問題
« 於: 2011-05-23 19:43 »
這幾天在練習時遇到了個問題,但一直無法解決所以想請問一下

我在parent process設定完handler後,用sigprocmask() BLOCK掉SIGINT和SIGQUIT兩個訊號,然後fork
接著我在child process UNBLOCK SIGINT和SIGQUIT兩個訊號
然後發現如果利用excl去執行其他程式,按下ctrl C 程式不會跳到handler 這是為什麼押?
因為我用sleep()去代替excl,中斷後會跳到handler.
所以百思不得其解@@


twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5415
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
回覆: 想請問一下SIGNAL的問題
« 回覆 #1 於: 2011-05-23 19:55 »
execl 執行別的程式, 整個行程就被那程式取代, 要怎麼回到你的 handler (記住, 你的行程被取代了) 呢?

sleep(), 還是你的行程, 自然會抓的到.
« 上次編輯: 2011-05-23 21:06 由 twu2 »

f905201

  • 可愛的小學生
  • *
  • 文章數: 8
    • 檢視個人資料
回覆: 想請問一下SIGNAL的問題
« 回覆 #2 於: 2011-05-23 20:11 »
什麼!! 原來行程被取代了!

所以...如果要讓子行程可以抓到handler,就一定不能用excl嗎?

因為我有個project是要在子行程用excl執行東西,又要能收到那兩個訊號,那這樣不就違背了!!= =

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5415
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
回覆: 想請問一下SIGNAL的問題
« 回覆 #3 於: 2011-05-23 21:04 »
可以試著用 system() 或 popen() 來試看看.

f905201

  • 可愛的小學生
  • *
  • 文章數: 8
    • 檢視個人資料
回覆: 想請問一下SIGNAL的問題
« 回覆 #4 於: 2011-05-26 20:02 »
好的~感謝你的幫助