这是我的问题-我有一个多线程(pthreads)C ++应用程序,其中有一个主控制循环线程和3个数据获取线程(一个串行端口读/写器和两个TCP套接字连接线程)。在程序执行过程中的某些时候,我需要执行一个shell脚本。我做了相当多的研究,发现这system()
是一种选择。替代选项似乎表明功能的使用fork()
和exec()
功能族。
我预期的问题是,使用fork()
会导致我的流程重复,并且很显然,这将使我对通信线程的运行无止境。由于system()
文档表明它fork()
在后台使用,这也意味着我不能使用它。
我对如何进行一无所知。是否存在针对此类问题的最佳实践方法?我看到的唯一可能的方法是尝试直接在C ++代码中创建需要运行的Shell脚本的功能。显然,这样做需要的工时是最不希望的选择。我还有其他选择吗?
我预期的问题是,使用fork()会导致我的进程被复制,并且很显然,这将使我对通信线程的运行没有任何问题。
fork()
实际上只复制调用线程。来自man fork
:
请注意以下几点:
子进程是通过一个线程创建的,该线程称为fork()。父级的整个虚拟地址空间都在子级中复制,包括互斥体的状态,条件变量和其他pthreads对象;使用pthread_atfork(3)可能有助于解决可能引起的问题。
也就是说,在后台不会出现一整套新的重复的工作线程破坏。这是POSIX规定的。只是不要触摸互斥锁,等等。system()
在fork内部要做的第一件事是call exec()
,所以这不是问题。选择使用还是自行进行分叉取决于您是要等待子流程完成,还是只是开始并继续进行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句