![](/img/trans.png)
[英]In a c program, does the whole process terminates when the main thread terminate?
[英]How to do something in C when a process terminates without hanging the program?
目前,我正在學習 UNIX 系統上的進程。
我的問題是,每次后台進程終止時我都需要做一些事情。 這意味着我不能使用 waitpid 的典型功能,因為這樣進程就不會在后台運行並且會掛起程序。
我也知道每當父進程的子進程終止時都會發送 SIGCHLD 信號,但是我不知道如何獲取我需要的所述進程的進程 ID。
在 C 中解決這個問題的正確方法是什么? 我已經嘗試過諸如 waitpid 上的 WNOHANG 選項之類的東西,但是這當然只會被調用一次,所以我不知道如何使其適用於我當前的情況。
waitpid 因為這樣進程就不會在后台運行,它會掛起程序。
如果進程不會在后台運行,帶有 pid 參數的waitpid
將立即退出(假設沒有 pid 沖突)。 而且,這不是真的 - 只需使用WNOHANG
...
但是我不知道如何獲取我需要的所述進程的進程 ID。 在 C 中解決這個問題的正確方法是什么?
使用sigaction
注冊信號處理程序並使用si_pid
類型的第二個信號處理程序參數中的字段siginfo_t
。 來自man sigaction :
SIGCHLD 填寫 si_pid、si_uid、si_status、si_utime 和 si_stime,提供孩子的信息。 si_pid 字段是子進程ID
一個使用它的工作示例位於man 3p 等待頁面下的Waiting for a Child Process in a Signal Handler for SIGCHLD
。
在 C 中解決這個問題的正確方法是什么?
C 標准不知道子進程和 SIGCHLD 信號。 這些是您操作系統的一部分。 在這種情況下,行為由POSIX標准化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.