我有以下代码:
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与父进程完全无关。
由于
答案 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 ...
通过这个你可以知道两个进程并行运行。