如何保持进程运行
How to keep a process running?
我有一个进程启动几个线程,这些线程做一些事情,监听一些端口等。
启动所有线程后,主线程当前进入无限循环:
它像:
int main()
{
//start threads
while (true)
{
sleep(1000);
}
}
额外的sleep
确保主线程不会消耗处理器。
这种方法可以吗?是否有关于如何保持流程存活的行业标准?谢谢。
编辑:一些澄清:
- 线程是侦听器,因此不能选择
join
或WaitForSingleObject
。通常我可以在这里使用 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
,可以发出退出循环的信号。 - 使用主线程执行当前由工作线程完成的一些处理。
- 定期检查布尔标志以决定是否退出。
归根结底,这取决于您的具体要求。
相关文章:
- 如何使用 c++ libboost 运行进程并获取其输出?
- 如何运行进程,然后在它退出时收到通知
- 在特定监视器上运行进程
- 使用Runtime.exec从Java运行进程-退出代码139
- 使用C++将CPU专用于在1个核心上运行进程
- 如何找到运行进程的物理套接字 ID/编号
- 如果从文件中读取,则无法按文件名运行进程
- 如何判断进程的用户令牌是否与运行进程的登录会话令牌相同?
- 在 C 语言的后台运行进程
- 在C++中获取带有 Windows 7 API 的运行进程
- r语言 - 如何直接在数据库服务器上运行C++进程以避免传输数据集
- 在虚拟文件系统中运行进程
- 检查是否已运行进程和通信的副本
- c++,总是运行进程或调用可执行文件
- 运行进程命令行
- 如何使用编程方法拦截linux上运行进程中调用的系统调用
- 使用c++获取当前运行进程中的X显示变量
- 获取当前运行进程的网络适配器
- 如何将ShellExecuteEx作为在父级退出后关闭的子级运行进程
- 在多核 (Linux) 中运行进程的命令行参数是什么