簡體   English   中英

檢查子進程的狀態

[英]Checking the status of child process

嗨,我是c編程的新手。我有以下代碼,基本上該程序需要檢查子進程的狀態,父進程要等到子進程終止后再打印“子進程終止”。 但是我嘗試了WNOHANG,但是以某種方式我的第二次檢查不起作用/或者我無法停止子進程。 有想法嗎? 提前致謝。

碼:

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

int main()
{
    int pid;
    int ppid;
    int status;
    pid=vfork();
    pid_t return_pid = waitpid(pid, &status, WNOHANG);

    if (pid<0) {
        printf("\n Error ");
        exit(1);
    } else if (pid==0) {
        printf("\n Hello I am the child process ");
        printf("\n My pid is %d %d ",return_pid, getpid());
        exit(0);
    } else if (return_pid == pid) {
            printf("child is finished %d %d", return_pid, pid);
            exit(0);
    } else {
        printf("\n Hello I am the parent process %d %d", return_pid, pid);
        printf("\n My actual pid is %d %d \n ",return_pid, getpid());
        exit(1);
    }
}

我想知道您的waitpid是否在錯誤的位置。 檢查man 2 wait並閱讀pid的參數代表什么

pid參數指定要等待的子進程集。 如果pid為-1,則調用等待任何子進程。 如果pid為0,則調用等待調用者的進程組中的任何子進程。 如果pid大於零,則調用等待進程ID為pid的進程。 如果pid小於-1,則調用等待進程組ID等於pid的絕對值的任何進程。

對我來說,粗體字表示孩子可能正在等待自己嗎? vfork的值將為子級返回0。

同樣,如果孩子沒有退出,WNOHANG選項將導致waitpid立即返回,這意味着父級不會等待孩子完成。 如果子進程已完成,則它將返回子進程的pid。

暫無
暫無

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

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