割り当てのために、私は時間認識シェルの作成に取り組んでいます。シェルはコマンドをフォークして実行し、設定された時間以上実行された場合はそれらを強制終了します。例えば。
input# /bin/ls
a.out code.c
input# /bin/cat
Error - Expired After 10 Seconds.
input#
さて、私の質問は、プログラムの処理でエラーが発生した場合、つまり、exevce が -1 を返した場合にアラームが開始されないようにする方法はありますか?
子プロセスは別々に実行され、何時間もの実験と研究の後で、このタイプのタスクについて議論したり、示唆したりするものをまだ見つけていないため、不可能かもしれないと感じています. 本当に不可能な場合、次のようなことが起こらないようにするにはどうすればよいですか...
input# /bin/fgdsfgs
Error executing program
input# Error - Expired After 10 Seconds.
文脈のために、これは私が現在取り組んでいるコードであり、これを自分で行う試みは削除されています。事前に助けてくれてありがとう!
while(1){
write(1, prompt, sizeof(prompt)); //Prompt user
byteCount = read(0, cmd, 1024); //Retrieve command from user, and count bytes
cmd[byteCount-1] = '\0'; //Prepare command for execution
//Create Thread
child = fork();
if(child == -1){
write(2, error_fork, sizeof(error_fork));
}
if(child == 0){ //Working in child
if(-1 == execve(cmd,arg,env)){ //Execute program or error
write(2, error_exe, sizeof(error_exe));
}
}else if(child != 0){ //Working in the parent
signal(SIGALRM, handler); //Handle the alarm when it goes off
alarm(time);
wait();
alarm(0);
}
}