我有以下的程序,当我运行该程序,我觉得真的很困惑的是,为什么我的程序没有EXCUTE为什么程序在这个C编程或unix编程(execvp()系统调用)中没有执行一些句子?
int num=i;
printf("it is No.%d !",num);
printf("hello , I will excute execvp!");
我的程序基本上创建6个进程EXCUTE executionbode()函数,然后用execvp超载原始程序。但是,每次运行程序时,字符串“你好,我将执行execvp”永远不会显示出来!我还认为上面的这三句话在运行程序中也没有执行?有人可以告诉我为什么吗?下面是我的程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include "makeargv.h"
#include "redirection.h"
#include <sys/wait.h>
int executionnode(int i);
int main(){
pid_t childpid;
int i;
int row=6;
for(i=0;i<row;i++)
{ childpid=fork();
if(childpid==0)
continue;
else if (childpid>0)
executionnode(i);
else {
perror("something wrong");
exit(1);
}
}
}
int executionnode(int i){
sleep(i);
printf("hello, I am process:%ld\n",(long)getpid());
wait(NULL);
char *execArgs[] = { "echo", "Hello, World!", NULL };
int num=i;
printf("it is No.%d !",num);
printf("hello , I will excute execvp!");
execvp("echo", execArgs);
}
有人能告诉我为什么吗?以及如何解决它?我觉得这真的很奇怪?这是因为execvp()函数吗?我刚开始学习操作系统,所以我非常困惑!感谢你们对我的帮助!
这一行:'wait(NULL);'将永远挂起,因为这个孩子没有孩子等。 – user3629249
你似乎对函数的返回值有些疑惑:'fork()'。发布的代码有孩子执行fork和父执行'execvp()'这是你似乎想要做的后退。用发布的代码 – user3629249
,会有很多孩子的孩子的孩子。等等。一般情况下,只有父类应该循环,调用fork()的时候执行execvp() – user3629249