Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C语言处理进程_C_Process - Fatal编程技术网

使用C语言处理进程

使用C语言处理进程,c,process,C,Process,只是一个关于C和进程的快速问题。在我的程序中,我创建了另一个子进程,并使用双向管道在子进程和父进程之间进行通信。子进程调用execl()运行另一个程序 我的问题是:我希望家长等待n秒,然后检查孩子运行的程序是否已退出(以及状态如何)。类似于waitpid(),但如果孩子在n秒内没有退出,我想做一些不同的事情。您可以使用waitpid()和WNOHANG作为轮询选项,或者为SIGCHLD注册信号处理程序。您可以在n秒后使用警报中断waitpid()(但不要在多线程环境中使用此方法) 这似乎就是我想

只是一个关于C和进程的快速问题。在我的程序中,我创建了另一个子进程,并使用双向管道在子进程和父进程之间进行通信。子进程调用execl()运行另一个程序


我的问题是:我希望家长等待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
     }