gpt4 book ai didi

c++ - 多线程程序和fork() : alternative or safe implementation

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:06:44 32 4
gpt4 key购买 nike

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

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

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

父进程中的线程应该能够

  1. 检测子进程的正常终止,在这种情况下应该能够创建另一个 fork() 来执行 open()/sendfile()/close() 一系列文件
  2. 在发生特定事件时终止 sendfile() 子进程并检测有意终止以进行清理

对于要求 1,我可以等待 sendfile() 的结果。要求 2 是我认为首先需要使用 fork() 的原因。

阅读以下帖子后

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

我的问题是:

  • 是否有任何其他解决方案来实现要求 2?
  • 或者我如何确保库调用 open()、close() 和 sendfile() 正常?

更新:

  • 该程序将在 Busybox Linux/ARM 上运行
  • 我假设我应该使用 sendfile() 来进行最有效的文件传输,因为我已经阅读了多篇关于这个主题的文章。实现我的要求的一种安全方法是将 fork()exec*()cp 一起使用,缺点是文件传输可能效率较低

更新 2:

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

最佳答案

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

我的 Linux 经验有些有限,但我可能会尝试尽早 fork 程序,在它获得多线程之前。现在您有两个实例,可以安全地使用单线程实例来管理其他实例的启动和停止。

关于c++ - 多线程程序和fork() : alternative or safe implementation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38891437/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com