我有以下的程序,当我运行该程序,我觉得真的很困惑的是,为什么我的程序没有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()函数吗?我刚开始学习操作系统,所以我非常困惑!感谢你们对我的帮助!
1)使用调试器2)阅读'wait'的手册页 – Olaf
这里有个提示:谁是子进程在等待,为什么?回答这个问题将会很快解决您的问题。另外,更确切地说,'execvp'会覆盖* current *过程映像。 – tonysdg