[英]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()函數。 請幫我。
一種可能的解決方案涉及ptrace
。 概述如下:
讓子調用ptrace(PTRACE_TRACEME)
。 讓家長能PTRACE_O_TRACEEXEC
選項, waitpid
的孩子。 在此設置中, waitpid
將在成功執行execl
返回。 測試狀態以查看是否設置了SIGTRAP
標志。 讓孩子繼續PTRACE_DETACH
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.