私はいくつかのプログラムを実行し、fork()
その後にexecve()
3 番目のプログラムを使用しています。これらのプログラムが意図したことはすべて実行されますが、最後に 3 番目のプログラムが返されません...つまり、コマンド プロンプトが表示されません。
wait()
呼び出しプログラムでコマンドを使用するexecve
と、wait ステートメントの順序がプログラムの終了順序と一致する場合にのみ、のプログラムが返されexecve
ます。なぜでしょうか?
簡略化されたコードは次のとおりです。
int main()
{
int child1,child2,status;
char*newargv1[] = {./xyz",NULL};
char *newargv2[] = {./abc",NULL};
if((child1 = fork())==0)
execve(newargv1[0],newargv1,NULL);
if((child2 = fork())==0)
execve(newargv2[0],newargv2,NULL);
while(wait(&status) != child1);
while(wait(&status) != child2);
}
child1 が最初に終了すると、正常に動作します。./xyz と ./abc はいくつかの単純な処理があり、制御が終了します。