2011-12-27 101 views
0

我正在開發一個將大量OS-9(微波)代碼移植到linux的項目。移植OS-9信號處理程序

OS-9中的信號處理功能允許您創建自己的信號,或者至少它是如何實現的(intercept()函數)。我並不十分了解Linux信號,並且一直在努力教自己。我有一個sigusr1工作的sigaction路線,只是爲了讓自己熟悉。在傳統的OS-9代碼中,有10個用戶定義的信號。什麼是最好的方式來完成這個在Linux?

OS-9信號處理程序是一個帶有大開關語句的函數。每個信號都對應(設置)一個全局變量,該變量在該進程代碼中的其他位置執行。

感謝, 賽斯

回答

2

您需要SIGRTMIN和SIGRTMAX之間使用信號編號。 這是討論的here

您發送信號殺死(如果你沒有數據)或sigqueue(如果你有數據)。

您會收到sigaction的信號。查看sigaction的手冊頁以查找sigqueue的數據將存儲在哪裏。

+0

您也可以使用'sigqueue()'將不同的語義複用到'SIGUSR1'這樣的信號上,通過使用提供的整數來區分它們。 – caf 2011-12-27 12:04:17

+0

謝謝,這似乎工作。但-1(表示整個羣體的信號)看起來並不像kill這樣工作,除非我有一些進程組設置錯誤。 – Seth 2011-12-28 17:29:30