【发布时间】:2026-01-01 12:30:01
【问题描述】:
我有以下程序,当我运行程序时,我很困惑为什么我的程序没有执行
int num=i;
printf("it is No.%d !",num);
printf("hello , I will excute execvp!");
我的程序基本上是创建6个子进程来执行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);将永远挂起,因为这个孩子没有孩子可以等待。 -
您似乎对函数的返回值有些困惑:
fork()。发布的代码让孩子执行分叉,父母执行execvp()这与您似乎想要做的相反。 -
用贴出的代码,会有很多很多的children of children。等等。一般来说,只有父级应该循环,在子级执行 execvp() 时调用 fork()
-
那里已经回答了完全相同的作者重复,一般来说,一个基本问题之前已经在这个网站上回答了很多次。
标签: linux c system-calls exec