pthread fork和exec

时间:2013-09-11 19:17:07

标签: c multithreading pthreads fork

我正在使用pthread_create()创建一个线程,在该线程中我使用fork + execlp来加载一个新脚本。

但问题是有时fork()调用很好,但它没有执行execlp调用。所以我有几个进程,父名称正在运行,这就是一些脚本被遗漏的原因。

例如:如果从我的主程序中执行4个脚本。

我创建了4个线程,在里面我使用fork + execlp来执行脚本。

但是当我看到它运行的脚本是什么时,它只显示3个脚本,并且只显示父名称的一个进程。

您能否告诉我处理这种情况的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

听起来execlp()来电可能会失败。如果成功,则永远不会返回,因此execlp()的任何返回都表示失败。通话结束后,您应立即致电perror("execlp")以显示错误,然后_exit(1);让新子流程退出。

答案 1 :(得分:0)

将多个线程与fork()组合在一起时,请确保只并行执行一个fork。执行此操作的pthreads方法是使用pthread_mutex_lock()锁定互斥锁。

在孩子中,你只有一个线程 - 一个叫fork()的线程。除了在fork之后和exec之前调用异步信号安全调用时,不要做任何事情。

有关详细信息,请参阅this SO question