これが私のコードの内訳です。
私は子供をフォークし(そして子供のpidをファイルに登録し)そしてそれからそれ自身のことをするプログラムを持っています。子は、プログラマーがargvで威厳のあるプログラムになります。子が実行を終了すると、(SIGUSR1を使用して)シグナルを親プロセスに送り返し、親が子をファイルから削除することを認識します。親は1秒停止し、テーブルを更新して削除されたエントリを確認し、中断したところから続行する必要があります。
pid = fork();
switch(pid){
case -1:{
exit(1);
}
case 0 :{
(*table[numP-1]).pid = getpid(); //Global that stores pids
add(); //saves table into a text file
freeT(table); //Frees table
execv(argv[3], &argv[4]); //Executes new program with argv
printf("finished execution\n");
del(getpid()); //Erases pid from file
refreshReq(); //Sends SIGUSR1 to parent
return 0;
}
default:{
... //Does its own thing
}
}
問題は、after execvが正常に開始および終了した後(return 0の前のprintfステートメントで通知されます)、switchステートメントの残りのコマンドが実行されていないことです。execvに^Cコマンドが含まれているのではないかと思います。これは、終了時に子を強制終了するため、残りのコマンドを終了することはありません。私はmanページを調べましたが、この主題に関して有用なものは何も見つかりませんでした。
ありがとう!