多线程程序和fork():替代或安全实现

时间:2016-08-11 08:43:19

标签: c++ linux multithreading

在多线程Linux / C ++程序中,我想将fork()SIGCHLD的信号处理程序一起使用。

在子进程中,我使用open()创建了两个新的文件描述符sendfile()close(),然后子进程退出。

我计划使用fork()来实现以下要求:

父进程中的线程应该能够

  1. 检测子进程的正常终止,并且在这种情况下应该能够为一系列文件创建另一个fork() open()/sendfile()/close()
  2. 在发生特定事件时终止sendfile() - 子进程并检测故意终止以清理
  3. 对于要求1,我可以等待sendfile()的结果。 要求2是我认为首先需要使用fork()的原因。

    阅读以下帖子后

    我认为我的解决方案可能不是很好。

    我的问题是:

    • 是否有其他解决方案来实施要求2?
    • 或者我如何确保库调用open(), close() and sendfile()可以正常?

    更新

    • 该程序将在Busybox Linux / ARM上运行
    • 我认为我应该使用sendfile()进行最有效的文件传输,因为我已经阅读过有关此主题的几篇帖子。 实现我的要求的一种安全方法可能是fork()exec*()使用cp,但缺点是文件传输效率可能较低

    更新2:

    • 在特定事件(而不是每个文件一次)的情况下fork()一次就足够了,因为我在子进程中切换到exec*() rsync。但是,程序需要在特定事件的情况下始终调用rsync

1 个答案:

答案 0 :(得分:3)

您可以使用线程,但强制终止线程通常会导致内存泄漏和其他问题。

我的linux体验有点受限,但在获得多线程之前,我可能会尝试早点分析程序。现在您有两个实例,可以安全地使用单线程实例来管理其他实例的启动和停止。