-1
fork()
을 사용하여 일부 코드를 실행하기 위해 하위 프로세스를 생성했지만 하위 프로세스에서 아래의 printf("child is running");
과 같은 일부 코드가 실행되지 않으며 내가 switch()
에서 문장을 제거하면 올바르게 작동 할 것이고, 왜 이런 일이 일어날 지 이해할 수 없습니다. 내가 코멘트에 말했듯이 당신이 형식 문자열의 끝에서 \n
를 사용하지 않는 경우fork()에 의해 생성 된 자식 프로세스의 코드 부분이 건너 뛰었습니다.
pid_t pid = fork();
if(pid == 0){
int execl_status = -1;
printf("child is running"); // this will not run
switch(cmdIndex)
{
case CMD_1:
execl_status = execl("./cmd1","cmd1",NULL);
break;
case CMD_2:
execl_status = execl("./cmd2","cmd2",NULL);
break;
case CMD_3:
execl_status = execl("./cmd3","cmd3",NULL);
break;
default:
printf("Invalid Command\n");
break;
}
}
'printf'줄을'printf ("자식 실행 중 \ n");'으로 변경하십시오. '\ n'을 사용하지 않으면'printf'는'stdout'을 즉시 플러시하지 않으므로 실행되지 않은 것처럼 보일 수 있습니다. 그렇지 않으면 자식 프로세스가 실행되지 않는 다른 이유를 알 수 없습니다. 'fork()'가'-1'을 반환하지 않았는지 확인 했습니까? – Pablo
@Pablo 고마워,이 작품은 나를 위해, 당신은 대답을 추가 할 수있는이 문제를 닫습니다. – laoqiren