使用C语言处理进程
只是一个关于C和进程的快速问题。在我的程序中,我创建了另一个子进程,并使用双向管道在子进程和父进程之间进行通信。子进程调用execl()运行另一个程序使用C语言处理进程,c,process,C,Process,只是一个关于C和进程的快速问题。在我的程序中,我创建了另一个子进程,并使用双向管道在子进程和父进程之间进行通信。子进程调用execl()运行另一个程序 我的问题是:我希望家长等待n秒,然后检查孩子运行的程序是否已退出(以及状态如何)。类似于waitpid(),但如果孩子在n秒内没有退出,我想做一些不同的事情。您可以使用waitpid()和WNOHANG作为轮询选项,或者为SIGCHLD注册信号处理程序。您可以在n秒后使用警报中断waitpid()(但不要在多线程环境中使用此方法) 这似乎就是我想
我的问题是:我希望家长等待n秒,然后检查孩子运行的程序是否已退出(以及状态如何)。类似于waitpid(),但如果孩子在n秒内没有退出,我想做一些不同的事情。您可以使用
waitpid()
和WNOHANG
作为轮询选项,或者为SIGCHLD
注册信号处理程序。您可以在n秒后使用警报中断waitpid()(但不要在多线程环境中使用此方法)
这似乎就是我想要的:)唯一的问题是,如果进程没有结束,waitpid()之后的代码永远不会运行。我该如何解决这个问题?或者如果这没有意义,我想在waitpid()之后将进程控制返回到代码中,这样它就可以杀死有问题的函数waitpid()路由似乎是最好的。是否有一种方法可以使用waitpid()获取最后一个子进程的退出值?我假设SIGCHLD在孩子退出时运行回调?
signal(SIGALRM,my_dummy_handler);
alarm(10);
pid_t p = waitpid(...);
if(p == -1) {
if(errno == EINTR) {
//timeout occured
} else {
//handle other error
}