execvp和fork没有按预期工作

时间:2014-08-02 07:41:12

标签: c pthreads fork execvp

我有以下代码:

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的第二个实例。

我无法让它们并行独立运行。

而不是fork,我应该使用pthreads吗?

我尝试执行的some_program与父进程完全无关。

由于

1 个答案:

答案 0 :(得分:0)

“我无法让它们并行独立运行。” - 否。两个过程将并行执行。要检查是否创建了这样的两个程序 -

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
int main()
{
   printf("Pid= %d\n", getpid());
   while(1);
}

编译这两个程序并制作两个可执行文件。将这两个exe文件名通过命令行参数传递给主程序,并使用系统命令运行。但是你的主程序应该是实时的。

for (loop=0;loop<2;loop++) 
{
    child_pid = fork();

    if (child_pid == 0)
    {
       system(argv[loop+1]);
       exit(0); // if you don't use exit your second exe file will be executed twice.
    }
}
while(1);

现在在终端中键入ps命令,找到TTY名称并运行主程序。打开一个新终端并输入

ps -e  | grep pts/X    // pts/X is main program running terminal name. it may pts/0 or pts/1 ...

通过这个你可以知道两个进程并行运行。