我正在使用pthread_create()创建一个线程,在该线程中我使用fork + execlp来加载一个新脚本。
但问题是有时fork()调用很好,但它没有执行execlp调用。所以我有几个进程,父名称正在运行,这就是一些脚本被遗漏的原因。
例如:如果从我的主程序中执行4个脚本。
我创建了4个线程,在里面我使用fork + execlp来执行脚本。
但是当我看到它运行的脚本是什么时,它只显示3个脚本,并且只显示父名称的一个进程。
您能否告诉我处理这种情况的最佳方法是什么?
答案 0 :(得分:1)
听起来execlp()
来电可能会失败。如果成功,则永远不会返回,因此execlp()
的任何返回都表示失败。通话结束后,您应立即致电perror("execlp")
以显示错误,然后_exit(1);
让新子流程退出。
答案 1 :(得分:0)
将多个线程与fork()
组合在一起时,请确保只并行执行一个fork。执行此操作的pthreads方法是使用pthread_mutex_lock()
锁定互斥锁。
在孩子中,你只有一个线程 - 一个叫fork()
的线程。除了在fork之后和exec之前调用异步信号安全调用时,不要做任何事情。
有关详细信息,请参阅this SO question。