只是一个关于C和流程的快速问题。在我的程序中,我创建了另一个子进程并使用双向管道在子进程和父进程之间进行通信。孩子调用execl()来运行另一个程序。
我的问题是:我希望父母等待n秒,然后检查孩子已运行的程序是否已退出(以及具有什么状态)。像waitpid()之类的东西但是如果孩子在n秒内没有退出,我想做一些与众不同的事情。
答案 0 :(得分:2)
您可以使用waitpid()
和WNOHANG
作为选项来轮询或注册SIGCHLD
的信号处理程序。
答案 1 :(得分:1)
您可以在N秒后使用警报中断waitpid()(尽管不要在多线程环境中使用此方法)
signal(SIGALRM,my_dummy_handler);
alarm(10);
pid_t p = waitpid(...);
if(p == -1) {
if(errno == EINTR) {
//timeout occured
} else {
//handle other error
}