代码之家  ›  专栏  ›  技术社区  ›  Gary

使用C语言中的进程

  •  1
  • Gary  · 技术社区  · 16 年前

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

    我的问题是:我希望父程序等待n秒,然后检查子程序运行的程序是否已退出(以及退出的状态)。有点像waitpid(),但是如果孩子在n秒内没有退出,我想做些不同的事情。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Bastien Léonard    16 年前

    你可以使用 waitpid() 具有 WNOHANG 作为轮询或注册信号处理程序的选项 SIGCHLD .

        2
  •  1
  •   nos    16 年前

    您可以在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
         }