int on_exit (void (*function)(int, void *), void *arg);
此函式的工作方式如同
atexit()
,但是所註冊之函式的原型有所不同:
void my_function (int status, void *arg);
status
引數值會傳遞給
exit()
或是從
main()
傳回。
arg
引數是第二個參數,會傳遞給
on_exit()
。要注意的是,當函式最後被調用時,必須確保
arg
所指向的記憶體是有效的。
Solaris 的最新版本不再支援此函式。你應該改用與標準相容的
atexit()
函式。
SIGCHLD
當一個行程終止時,核心會傳送
SIGCHLD
信號給父行程。預定情況下,此信號會被忽
略,父行程因而不會採取任何行動。然而,行程可經由
signal()
或
sigaction()
系統呼
叫選擇處理此信號。關於信號的進一步細節會在第10 章加以說明。
SIGCHLD
信號隨時都可以被產生和派送,因為子行程的終止與它的父行程之間是不同步
的。但是很多時候,父行程會想要多瞭解與其子行程之終止有關的事情,或甚至會明確
等待此事件的發生。此狀況下,可以使用下一節所討論的系統呼叫。
等待已終止的子行程
經由信號收到通知並沒有什麼不好,但是許多父行程,在它們其中一個子行程終止時,
會想要取得更多資訊—例如,子行程的傳回值。
若一個子行程終止時會整個不見,則正如預期,父行程將無法取回任何資訊。因此,
Unix 的原設計者決定,若子行程的死亡時間先於它的父行程 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month, and much more.