多线程程序和fork():可选的或安全的实现
Multithreaded program and fork(): alternative or safe implementation
在一个多线程的Linux/c++程序中,我想使用fork()
和SIGCHLD
的信号处理程序。
在子进程中,我使用open()
创建了两个新的文件描述符,sendfile()
和close()
,然后子进程退出。
我计划使用fork()
来实现以下要求:
父进程中的线程应该能够
- 检测子进程的正常终止,在这种情况下,应该能够为一系列文件创建另一个
fork()
来执行open()/sendfile()/close()
- 在特定事件的情况下杀死
sendfile()
子进程并检测故意终止以清理
对于需求1,我可以等待sendfile()
的结果。需求2是我认为我首先需要使用fork()
的原因。
阅读以下文章后
- 线程和fork()。我该怎么处理呢?
- 多线程程序的fork
我想我的解决方案可能不太好。
我的问题是:
- 是否有其他方案来实现要求2 ?
- 或者我如何确保库调用
open(), close() and sendfile()
将是好的?
更新:
- 程序将在Busybox Linux/ARM上运行
- 我认为我应该使用
sendfile()
进行最有效的文件传输,因为我读过关于这个主题的几篇文章。实现我的要求的一种安全的方法是使用fork()
和exec*()
与cp
,缺点是文件传输可能效率较低
- 在特定事件的情况下(而不是每个文件一次)
fork()
就足够了,因为我在子进程中切换到exec*()
和rsync
。但是,程序总是需要在特定事件的情况下调用rsync
。
可以使用线程,但是强制终止线程通常会导致内存泄漏和其他问题。
我的linux经验有些有限,但我可能会尝试在程序变成多线程之前,在之前,在中使用。现在您有了两个实例,可以安全地使用单线程实例来管理其他实例的启动和停止。
相关文章:
- 在c++队列中使用pop和visit实现线程安全
- 如何使用winsock在c++应用程序中实现安全套接字通信
- 实现在多线程代码中安全恢复的断点
- 在C++线程内实现多个计时器的最安全方法
- 我是否需要在 OpenSSL 1.1.0+ 中使用加密锁定函数来实现线程安全?
- STR这个实现是否安全且可移植?
- 实现没有不安全服务器凭据的自定义 AuthMetadataProcessor
- 是否有很好的C 实现安全字符串
- 如何实现功能线程安全
- 线程安全堆栈实现
- 是否可以实现由数组组成的线程安全圆形增益?
- 双重检查单例线程的实现是否安全?
- 使用新线程在类似于 Scott Meyer 的单例习惯用法的实现中实例化单例是否安全?
- 使用括号运算符实现矩阵类的安全方法
- 如何使用自然外观的语法实现线程安全容器
- 这是通用 SQL 执行函数的安全实现吗?
- 循环缓冲区的线程安全实现.来自 boost 库的
- 这是交换(多线程)的异常安全实现吗
- 线程安全实现给出分段错误
- 使用 shared_ptrs 对<无符号 int、boost::any> 类型的通用容器的线程安全实现