簡體   English   中英

通知父流程

[英]Notification to a parent process

使用fork系統調用時,我已經多次看到父級調用waitpid以便子級可以完成操作。

我的問題是孩子是否將通知發送給家長。 在不使用任何共享資源的情況下,父母如何識別孩子已完成?

子級退出時,操作系統將SIGCHLD發送給父級。 您可以選擇使用WNOHANG輪詢waitpid() ,也可以選擇在接收到SIGCHLD之后使用wait()進行檢查。 子進程不需要做任何特別的事情,這全部由OS管理。

在Linux操作系統中,每個子對象都有一個父對象,即使父對象在該子對象之前死亡,該子對象也由init(PID:1)進程繼承。 這樣做是為了避免任何僵屍進程(進程表中存在進程條目,但進程實際上已經死亡)不占用內存空間。

內核會密切關注所有由於完全執行或其他原因(例如無效的內存訪問)而死亡的進程,並保留一些信息,例如子進程的退出狀態。 當子級終止時, SIGCHLD信號將發送給父級。 默認情況下,信號只是被忽略。 但是,通常在SIGCHLD的處理程序中實現了wait()系統調用,以便父級可以對子級的退出狀態進行操作。

除了接收Erik 提到SIGCHLD之外,您還可以使用WNOHANG輪詢孩子感興趣的事件。 這是一個例子:

pid_t pid = fork();
if (pid) {
    while (1) {
        int status;
        int waitpid(pid, &status, WNOHANG);
        if (pid == waitpid && WIFEXITED(status))
            break;            
        // do other stuff
    }
}

暫無
暫無

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

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