多线程程序和fork():可选的或安全的实现

Multithreaded program and fork(): alternative or safe implementation

本文关键字:安全 实现 程序 fork 多线程      更新时间:2023-10-16

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

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

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

父进程中的线程应该能够

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

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

阅读以下文章后

  • 线程和fork()。我该怎么处理呢?
  • 多线程程序的fork

我想我的解决方案可能不太好。

我的问题是:

  • 是否有其他方案来实现要求2 ?
  • 或者我如何确保库调用open(), close() and sendfile()将是好的?

更新:

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

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

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

我的linux经验有些有限,但我可能会尝试在程序变成多线程之前,在之前,在中使用。现在您有了两个实例,可以安全地使用单线程实例来管理其他实例的启动和停止。