簡體   English   中英

當進程終止而不掛起程序時,如何在 C 中執行某些操作?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM