0
void execute(char **argv,int num)
{
int i;
pid_t pid;
int status;
int child_status;
if ((pid = fork()) < 0)
{ /* fork a child process*/
printf("*** ERROR: forking child process failed\n");
exit(1);
}
else if (pid == 0)
{ /* for the child process: */
int c;
if (c==execvp(argv[0], argv) < 0)
{ /* execute the command */
printf("%d\n", c);
printf("*** ERROR: exec failed\n");
perror(" ");
exit(1);
}
}
else if(bg!=1){
while (waitpid(pid,&status,WNOHANG|WUNTRACED));
}
else if(bg==1)
{
wait (&child_status);
if (WIFEXITED (child_status))
{
printf("the child process exited normally, with exit code %d\n",
WEXITSTATUS (child_status));
}
else
printf ("the child process exited abnormally\n");
}
}
這是我的自定義外殼程序中的執行功能。當我執行諸如gedit &
之類的操作時,會在打印下一個提示之前打印退出狀態。我該如何解決? 我在做什麼錯?該過程的退出狀態在退出之前已打印
你是什麼意思「打印之前」?你想要它打印後? –
當子進程退出時,它應該顯示退出狀態的權利?像gedit&在後臺打開文本編輯器。當我點擊關閉該過程時,然後才顯示退出狀態。在此之前,這個過程還在繼續......好嗎? –
好吧,如果有一個已經運行的gedit實例,並且你再次運行它,新實例將立即退出。許多GUI程序都這樣做,所以嘗試使用非GUI界面程序。 – redneb