在多线程Linux / C ++程序中,我想将fork()
与SIGCHLD
的信号处理程序一起使用。
在子进程中,我使用open()
创建了两个新的文件描述符sendfile()
和close()
,然后子进程退出。
我计划使用fork()
来实现以下要求:
父进程中的线程应该能够
fork()
open()/sendfile()/close()
sendfile()
- 子进程并检测故意终止以清理对于要求1,我可以等待sendfile()
的结果。
要求2是我认为首先需要使用fork()
的原因。
阅读以下帖子后
我认为我的解决方案可能不是很好。
我的问题是:
open(), close() and sendfile()
可以正常?更新
sendfile()
进行最有效的文件传输,因为我已经阅读过有关此主题的几篇帖子。
实现我的要求的一种安全方法可能是fork()
和exec*()
使用cp
,但缺点是文件传输效率可能较低更新2:
fork()
一次就足够了,因为我在子进程中切换到exec*()
rsync
。但是,程序需要在特定事件的情况下始终调用rsync
。答案 0 :(得分:3)
您可以使用线程,但强制终止线程通常会导致内存泄漏和其他问题。
我的linux体验有点受限,但在获得多线程之前,我可能会尝试早点分析程序。现在您有两个实例,可以安全地使用单线程实例来管理其他实例的启动和停止。