execvp和fork未按预期工作
我有以下代码:execvp和fork未按预期工作,c,pthreads,fork,execvp,C,Pthreads,Fork,Execvp,我有以下代码: for (loop=0;loop<2;loop++) { child_pid = fork(); if (child_pid == 0) { rc = execvp ("/usr/local/some_program", arguments); } } for(loop=0;loop“我无法让它们并行独立运行。”-不。两个进程将并行执行。要检查是否创建两个类似这样的
for (loop=0;loop<2;loop++)
{
child_pid = fork();
if (child_pid == 0)
{
rc = execvp ("/usr/local/some_program", arguments);
}
}
for(loop=0;loop“我无法让它们并行独立运行。”-不。两个进程将并行执行。要检查是否创建两个类似这样的程序-
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
int main()
{
printf("Pid= %d\n", getpid());
while(1);
}
通过这一点,您可以知道这两个进程是否并行运行。您到底看到了什么?如果用运行程序并在前后打印调试消息的shell脚本替换程序会发生什么情况?对于调试:在调用fork()后直接添加perror(“fork()”);
。不可能知道父线程及其子线程的运行时间或顺序。除非子线程正在做大量工作或等待外部事件,否则可能只是第一个子线程在父线程启动第二个子线程之前运行完成。我现在意识到,从新线程调用execvp毫无意义exec家族中的函数将破坏当前进程中的所有线程,并用正在执行的进程替换整个进程。因此,如果我想使用execvp,那么我必须使用fork。我希望我做到了这一点。谢谢,我已验证并确保两个fork程序并行运行。
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 -e | grep pts/X // pts/X is main program running terminal name. it may pts/0 or pts/1 ...