2017-12-29 31 views
-1

私はfork()を使用してコードを実行する子プロセスを生成しますが、子プロセスでは以下のようなコードが実行されません。 switch()で文章を削除すると、正しく実行されますが、なぜこれが起こるのか理解できません。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( "child \ n"); 'に変更してください。 '\ n'がなければ' printf'は 'stdout'を直ちにフラッシュしないので、実行されていないかのように見えるかもしれません。それ以外の場合は、子プロセスが実行されない別の理由がわかりません。 'fork()'が '-1'を返さなかったことも確認しましたか? – Pablo

+0

@Pabloありがとう、これは私のために働く、あなたは答えを追加することができます、私はこの問題を閉じるでしょう。 – laoqiren

答えて

1

私はあなたがprintfは通常すぐstdoutをフラッシュしていない、フォーマット文字列の末尾に\nを使用しない場合は

printf("child is running\n"); 

にごprintf行を変更し、コメントで言ったように何も実行されていないかのように見えるかもしれません。

あなたが(何らかの理由で)改行を印刷したくない場合は、あなた自身stdoutフラッシュもできます

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

私はそれが実行されていないように見えます理由としては他の理由を見ません。また、fork()-1を返すかどうかを確認することを忘れないでください。おそらく、ユーザーアカウントがフォークされたプロセスの制限に達している可能性があります。

関連する問題