【发布时间】:2010-04-23 12:31:02
【问题描述】:
所以基本上我希望“cmd_limit”以秒为单位取一个数字,这是我们等待子进程(安全地假设只有一个)完成的最长时间。如果子进程确实在睡眠期间完成,我希望 cmd_limit 返回 pass 并且不运行其余的 cmd_limit 代码。谁能帮我做这个,这是我到目前为止所得到的......
int cmd_limit( int limit, int pid ) {
signal( SIGCHLD, child_died );
sleep( limit );
kill( pid, SIGKILL );
printf("killin'\n");
return PASS;
}
void child_died( int sig ) {
int stat_loc; /* child return information */
int status; /* child return status */
waitpid( -1, &stat_loc, WNOHANG );
if( WIFEXITED(stat_loc) ) { // program exited normally
status = WEXITSTATUS( stat_loc ); /* get child exit status */
}
printf("child died: %s\n", signal);
}
【问题讨论】:
-
你看过
alarm()吗? -
我知道警报,但我不确定如何确保在睡眠期间可以使用警报从 cmd_limit 返回?
-
sleep被不可忽略的信号打断(请阅读sleep手册页了解具体情况),如果这是您想知道的。它还返回中断时的剩余时间,如果没有中断,则返回 0。但是,您不应该在某些系统上混合调用sleep和 ALRM 信号。