C言語でwaitpidの戻り値が-1になる
c言語で、子プロセスの中でcshを実行し、正常終了(exit)しているのにも関わらず、waitpidの戻り値が子プロセスIDではなく-1が返ってきて困っています。
cshの中の処理は正しく実行されていました。
errnoはECHILDでした。
どのような原因が考えられますでしょうか....
ソースは諸事情により載せれません。申し訳ありません。
大体こんな感じだったと思います。
pid_t pid = fork(); if (pid < 0) { exit(-1); } else if (pid == 0) { // module = 実行するcsh,pArgs=渡す引数の配列 execvp(module, pArgs); //ここまでは来ていないことは確認済み exit(-1); } // 親プロセス int status; pid_t r = waitpid(pid, &status, 0); //ここで-1が返ってくる if (r < 0) { switch(errno){ case ECHILD:printf("ECHILD_ERR\n");break; //ECHILDエラーになりこの処理が実行 case EINTR:printf("EINTR_ERR\n");break; case EINVAL:printf("EINVAL_ERR\n");break; default:break; } exit(-1); } if (WIFEXITED(status)) { //確認したら0でした // 子プロセスが正常終了の場合 printf("child exit-code=%d\n", WEXITSTATUS(status)); //確認したら0でした } else { printf("child status=%04x\n", status); } return 0;
回答2件
あなたの回答
tips
プレビュー