对于一项任务,我正在创建一个时间感知外壳。如果命令运行超过设定的时间,shell 会分叉并执行命令并杀死它们。例如。
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);
}
}