簡體   English   中英

Waitpid函數中的WNOHANG宏

[英]WNOHANG Macro in Waitpid Function

程序:

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<stdlib.h>

int main()
{
    int pid=fork();
    if(pid==0){
        printf("Child Executing: PID = %d\n",getpid());
        pause();
    }
    else{
        printf("Parent waiting: PID = %d\n",getpid());
        int status;
        waitpid(pid,&status,WNOHANG);
        if(WIFEXITED(status))
            printf("Child Terminates Normally\n");
        else if(WIFSIGNALED(status))
            printf("Child terminated by signal\n");
    }
}

在上面的程序中,我將WNOHANG宏傳遞給waitpid函數的option參數。 它不等待子進程完成。 那么,wnohang的用途是什么。 手冊頁包含以下語句,

WNOHANG return immediately if no child has exited.

我不明白確切的意思。 那么,WNOHANG的用途是什么?在哪里使用它。 WNOHANG是否有任何實時用例。

提前致謝。

如果要定期輪詢以查看進程是否已退出,則可以使用此功能。 如果還沒有,請繼續執行其余程序:

while (some_condition) {
    result = waitpid(pid, &status, WNOHANG);
    if (result > 0) {
        // clean up the process
    } else if (result < 0) {
        perror("waitpid");
    }
    // do other processing
}

如果子狀態未更改,希望父進程繼續執行一些有用的工作,則它( WNOHANG )非常有用。

一個常見的示例是在Shell中實現作業控制 通常,外殼程序(父進程)通過調用waitpid()而不阻塞自身來定期檢查任何后台進程(子進程)狀態更改的狀態。 有關此方面的虛構示例,請參見停止和終止的作業

暫無
暫無

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

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