1

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

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

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

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

但是当我看到它正在运行的脚本是什么时,它只显示了 3 个脚本和一个带有父名称的进程。

您能否让我知道处理这种情况的最佳方法是什么?

4

2 回答 2

1

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

于 2013-09-11T23:45:38.430 回答
0

当组合多个线程时,fork()请确保您只并行执行一个 fork。执行此操作的 pthreads 方法是使用pthread_mutex_lock().

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

有关更多信息,请参阅此 SO 问题

于 2015-03-16T20:54:46.883 回答