1我试图在1秒后杀死一个子进程。 子进程是一个外部c程序,它运行一些嵌套的for循环,并在通过后显示“ ALL DONE”。 循环大约需要10秒钟,因此,如果我正确设置了计时器和动作处理程序,则永远不要将其设置为“全部完成”。
创建计时器后,将使用execve运行子进程。pid_t pid = -1;
void time_handler(int signal){
printf("in time_handler\n");
kill(pid, SIGKILL);
}
int main(int argc, char *argv[]){
char *const path = "/home/aidan/CSC252/a4/test";
char *const env_args[] = { (char*)0 };
pid = fork();
while(1==1){
if(pid == 0){ //in child
printf("in child\n");
struct sigaction sa;
struct itimerval *timer = malloc(sizeof(struct itimerval));
sa.sa_handler = &time_handler;
printf("sigaction: %d\n", sigaction(SIGVTALRM, &sa, NULL));
timer->it_value.tv_sec = 0;
timer->it_interval.tv_sec = 1;
printf("settimer: %d\n", setitimer(ITIMER_REAL, timer, NULL)); //start timer
//printf("getitimer: %d\n", getitimer(ITIMER_REAL, timer));
int exec = execve(path, NULL, env_args);
printf("Exec is %d\n", exec); //-1 = error
}
else if (pid > 0){//in parent
printf("in parent, pid: %d\n", pid);
printf("wait: %d\n", wait(NULL));
pid = 0;
}
}
}
sigaction和setitimer都返回0,但是我不确定我是否正确处理了定时器到期。 我尝试阅读alarm(5);
但是我的结果不成功。
当前输出为:in parent, pid: 2362
in child
sigaction: 0
settimer: 0
In test
ALL DONE
wait: 2362
in child
sigaction: 0
settimer: 0
In test
ALL DONE
我不确定为什么它只运行两次然后退出。