【发布时间】:2014-08-02 07:41:11
【问题描述】:
我有以下代码:
for (loop=0;loop<2;loop++)
{
child_pid = fork();
if (child_pid == 0)
{
rc = execvp ("/usr/local/some_program", arguments);
}
}
我根据循环的值更改传递给 /usr/local/some_program 的参数。我希望 some_program 并行执行两个实例。但是我看到我首先执行了 some_program 一次,并且只有在它完成之后我才能执行 some_program 的第二个实例。
我无法让它们并行且独立地运行。
我应该使用 pthreads 而不是 fork?
我尝试执行的 some_program 与父进程完全无关。
谢谢
【问题讨论】:
-
你到底看到了什么?如果将程序替换为运行程序并在前后打印调试消息的 shell 脚本会发生什么?
-
调试:在调用
fork()之后直接添加perror("fork()");。 -
无法知道父级及其子级何时或以何种顺序运行。除非孩子们正在做大量工作或正在等待外部事件,否则可能只是第一个孩子在父母开始第二个孩子之前完成。
-
我现在意识到从新线程调用 execvp 是没有意义的—— exec 系列中的所有函数都会销毁当前进程中的所有线程,并用正在执行的进程替换整个进程。因此,如果我想使用 execvp,那么我必须使用 fork。我希望我是对的。