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 GUI로 시도하십시오. – redneb