簡體   English   中英

在 C 語言的 Linux 編程中,子進程可以等待父進程終止嗎?

[英]Can a child process wait for the parent process to terminate in Linux programming in C?

在Linux的C編程中,我知道wait()函數用於等待子進程終止,但是子進程是否有一些方法(或函數)可以等待父進程終止?

Linux 對此有一個擴展(如非 POSIX 函數)。 查找prctl (“進程相關控制”)。

使用prctl ,您可以安排孩子在父母去世時收到信號。 查找與prctl使用的PR_SET_PDEATHSIG操作代碼。

例如,如果您將其設置為SIGKILL信號,則它有效地為我們提供了一種在父母死亡時讓孩子死亡的方法。 但當然,信號可以是孩子可以捕捉到的東西。

prctl可以做各種其他的事情。 它就像一個ioctl其目標是進程本身:“進程 ioctl”。

簡短的回答:沒有。

父進程可以控制其子進程的終端或進程組,這就是我們擁有wait()waitpid()函數的原因。 孩子對其父母沒有那種控制權,因此沒有任何內置的東西。

如果您真的需要孩子知道其父級何時退出,您可以讓父級在atexit()處理程序中向子級發送信號,並讓子級捕獲該信號。

在 Linux 中,您可以使用值為 PR_SET_PDEATHSIG 的 prctl 來建立一個信號,當創建它的線程死亡時,該信號將發送到您的進程。 也許你覺得它很有用。

當父進程結束時,子進程被init采用,因此如果ppid()==1或ppid()!=就足以檢查子進程,而不是原始的PPID,這意味着父進程已完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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