我想fork()一个子进程,然后调用execl()用一个新的进程替换子进程映像,这个进程可能不会停止(将会停留在while循环中或者期望输入,例如它不应该)。
我想等待它不超过X秒。
它应该是这个样子的是:等待一个不超过X秒的子进程
int main() {
pid_t pid=fork();
if (pid==-1) {
perror("fork() error");
}
else if (pid==0) {
//call execlp("exe.out","exe.out",arg1, ... ,NULL)
//where exe.out might not stop at all
}
else {
//wait for X seconods, and if child process didn't terminate
//after X seconds have passed, terminate it
}
}
wait()和waitpid函数()不提供此功能。
怎么办?
谢谢!
'waitpid()'有一个'WNOHANG'标志,它允许你测试孩子是否已经退出而没有阻塞。 –
似乎应该有一个更简单的方法来做到这一点,但可以安装一个'SIGCHLD'信号处理程序,它会在孩子退出时通知您,因此您可以安装一个信号处理程序,它将通过您的主线程执行一个管道,然后你的主代码路径将等待一个超时的管道接收端的'select'。 – mkimball
嗨@PP。,感谢您的评论。 Linux手册页说,如果我设置了WNOHANG,它将“如果没有孩子退出就立即返回”。我可以在哪里指定X秒? –