簡體   English   中英

在C程序中調用execl()后如何控制父進程的執行?

[英]How to control execution of parent process after execl() call in C program?

我有一個簡單的C程序,它使用fork()和execl()執行應用程序。 如果execl()無法運行該應用程序,那么我必須在父進程中調用一個函數並退出子進程。 如果execl()成功運行該應用程序,那么我已經顯示了來自父進程的成功日志。 因此,父進程應等待子進程的execl()調用(只是該調用,直到應用程序執行結束為​​止),獲取有關其狀態的一些信息,然后做出決定並繼續自己的執行。 這是我的代碼。

int main()
{
    int iExecRetVal, pid;
    pid = fork();

    if (pid == -1)
    {

    }
    else if (pid > 0)
    {
    }
    else
    {
        iExecRetVal = execl("./flute-static", "./flute-static", "-send", "-a192.168.190.1/6666", "JFlute.1.2.tar.gz", NULL);
        if (iExecRetVal == -1)
        {
            /*execl() failed, need some error handling in the parent process*/
        }
        _exit(0);
    }

    /*Parent's normal execution*/
}

int HandleSuccessFromParent()
{
    /*Should be called when exec call was successful*/
}

int HandleFailureFromParent()
{
    /*Should be called when exec call was NOT successful*/
}

我們知道execl()不會成功返回。 因此,如何在子對象中的execl()調用之后正確調用HandleSuccessFromParent()和HandleFailureFromParent()函數。 請幫我。

子進程需要退出,並顯示錯誤狀態(非零; 1為通用, EXIT_FAILURE為標准C)。

父進程需要等待子進程完成,並使用wait()waitpid()捕獲子進程的退出狀態。

如果您需要知道孩子是否死亡,但又不想等待它完成,請在WNOHANG停頓后將waitpid()WNOHANG ,以使孩子嘗試運行(亞秒級的延遲可能足夠長)。

一種可能的解決方案涉及ptrace 概述如下:

讓子調用ptrace(PTRACE_TRACEME) 讓家長能PTRACE_O_TRACEEXEC選項, waitpid的孩子。 在此設置中, waitpid將在成功執行execl返回。 測試狀態以查看是否設置了SIGTRAP標志。 讓孩子繼續PTRACE_DETACH

暫無
暫無

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

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