2016-04-29 10 views
-1
pid_t pid; 

    if ((pid == fork()) == 0){ 
      if (execvp(arg[0], arg) < 0) { 
       printf("%s: Command not found.\n", arg[0]); 
       exit(0); 
      } 

    } 

    if (background == 0) 
    { 
     int status; 
     if (waitpid(pid, &status, 0) < 0) 
      printf("waitfg: waitpid error"); 
     while(waitpid(-1, 0, WNOHANG) >= 0){} 


    } 
    else 
    { 
    printf("%d %s", pid, cmdline); 
    } 

私のプログラムにはこのコードがありますが、親プロセスにすべての子プロセスを取得しようとしていますが、問題はまだ解決していないということです。私はコードを使用しようとしています:子プロセスとバックグラウンドを取得する

while(waitpid(-1, 0, WNOHANG) >= 0){} 

ゾンビプロセスを取り除いていないようです。代わりに刈り取るために何をしなければならないのですか

また、私はここに背景をしているかどうかはわかりません。

+2

に置き換える必要があります。if((pid == fork())== 0){'if((pid = fork())== 0){' – Garf365

+0

もう1つはほこりをかむ、(「賢い」化合物の発現)。 –

答えて

0

あなたのコードが間違っている:

pid_t pid; 

if ((pid == fork()) == 0){ // PROBLEM HERE 
     if (execvp(arg[0], arg) < 0) { 
      printf("%s: Command not found.\n", arg[0]); 
      exit(0); 
     } 

} 

あなたはfork() =>未定義の動作の結果で初期化されていないpid比較(と後に、あなたは0で、この比較の結果を比較)

if ((pid == fork()) == 0){if ((pid = fork()) == 0){

関連する問題