execvp
仕組みと同じように仕事をするのに苦労してsystem()
います。
コードを使用する場合:
int cstatus; /* Exit status of child. */
pid_t cpid;
switch (cpid = fork ()) {
case -1:
printf("fork");
case 0: // child
system("./file");
printf("child->");
default:
pid_t tpid = wait(&cstatus);
printf("parent\n");
}
期待どおりに./file
実行され、印刷されますchild->parent
しかし、次のようにプログラムを実行しようとすると:
int cstatus; /* Exit status of child. */
pid_t cpid;
switch (cpid = fork ()) {
case -1:
printf("fork");
case 0: // child
execvp("file", NULL);
printf("child->");
default:
pid_t tpid = wait(&cstatus);
printf("parent\n");
}
の出力が得られますが、コマンド プロンプトでchild->parentparent
ファイルに (から生成された) 出力が表示されません。file
ここで何か間違ったことをしていますか?私は基本的file
に、フォアグラウンドで実行し、親が完了するまで待機させようとしています。