我有以下的程序,當我運行該程序,我覺得真的很困惑的是,爲什麼我的程序沒有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