2017-12-29 13 views
-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; 
     } 
} 
+2

'printf'줄을'printf ("자식 실행 중 \ n");'으로 변경하십시오. '\ n'을 사용하지 않으면'printf'는'stdout'을 즉시 플러시하지 않으므로 실행되지 않은 것처럼 보일 수 있습니다. 그렇지 않으면 자식 프로세스가 실행되지 않는 다른 이유를 알 수 없습니다. 'fork()'가'-1'을 반환하지 않았는지 확인 했습니까? – Pablo

+0

@Pablo 고마워,이 작품은 나를 위해, 당신은 대답을 추가 할 수있는이 문제를 닫습니다. – laoqiren

답변

1

printf("child is running\n"); 

printf 줄을 변경, printf 보통 바로 stdout를 플러시하지 않습니다 그래서 아무 것도 실행되지 않은 것처럼 보일 수 있습니다. 당신이 (어떤 이유) 개행 문자를 인쇄하지 않으려면

, 당신은 자신도 플러시 stdout 수 :

printf("child is running"); 
fflush(stdout); 

나는이 실행되지 나타납니다 이유에 다른 이유가 없다. 또한 fork()-1을 반환하는지 확인하는 것을 잊지 마십시오. 아마도 사용자 계정이 포크 프로세스의 한도에 도달했을 것입니다.

관련 문제