如何保持进程运行

How to keep a process running?

本文关键字:运行 进程 何保持      更新时间:2023-10-16

我有一个进程启动几个线程,这些线程做一些事情,监听一些端口等。

启动所有线程后,主线程当前进入无限循环:

它像:

int main()
{
   //start threads
   while (true)
   {
      sleep(1000);
   }
}

额外的sleep确保主线程不会消耗处理器。

这种方法可以吗?是否有关于如何保持流程存活的行业标准?谢谢。

编辑:一些澄清:

  • 线程是侦听器,因此不能选择joinWaitForSingleObject。通常我可以在这里使用 join,但线程是由第三个客户端库启动的,我对它们没有任何控制权。
  • 从设计的角度来看,在主线程中进行一些处理是没有意义的。

.部分取自 Linux Daemon Writing HOWTO,我假设你想要这样的东西:

int main() {
    pid_t pid;
    /* Fork off the parent process */       
    pid = fork();
    if (pid < 0) {
            exit(EXIT_FAILURE);
    }
    /* If we got a good PID, then
       we can exit the parent process. */
    if (pid > 0) {
            exit(EXIT_SUCCESS);
    }
    // now start threads & do the work
    for( thread *t : threads ) {
            join( t );
    }
    return 0;
}

这样主进程将退出,子进程将生成将完成工作的线程。最后,子进程将等待这些线程完成,然后再退出自身。

我建议你让你的主线程等待其他线程的终止:

int main( ) {
  // start threads
  for( thread *t : threads ) {
    join( t );
  }
  // finalize everything or restart the thread
  return 0;
}

如果您使用的是 POSIX 线程,则 pthread_join 函数将执行此操作。

我不相信有行业标准

您拥有的是运行主线程的完全可接受的方式。但是,您可能希望包含一种突破循环的方法。

其他方法包括:

  • 使用 join 命令等待所有工作线程完成。
  • 等待主线程中的event,可以发出退出循环的信号。
  • 使用主线程执行当前由工作线程完成的一些处理。
  • 定期检查布尔标志以决定是否退出。

归根结底,这取决于您的具体要求。