问题描述
Linux的新手,我试图在Linux操作系统中读取命令行参数。我希望能够以编程方式执行作为命令行参数给出的命令。这是我到目前为止的内容:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc,char* argv[])
{
int counter;
for(counter = 1; counter < argc; counter++){
pid_t pid = fork();
if(pid < 0)
{
perror("Forking Failed");
exit(1);
}
else if(pid == 0)
{
char *args[] = {argv[counter],NULL};
printf("Argument to be passed: %s \n",argv[counter]);
execvp(args[0],args);
perror("Command Failed.");
exit(0);
}
printf("Process %s completed successfully.\n",argv[counter]);
}
exit(0);
}
我在终端上的输出:
darren@darren-VirtualBox:~/Desktop$ ./cmdarguments /home/darren/Desktop/fullpathdoc1 /home/darren/Desktop/fullpathdoc2
Process /home/darren/Desktop/fullpathdoc1 completed successfully.
Process /home/darren/Desktop/fullpathdoc2 completed successfully.
darren@darren-VirtualBox:~/Desktop$ Argument to be passed: /home/darren/Desktop/fullpathdoc2
This is the second program that simply prints this statement.
Argument to be passed: /home/darren/Desktop/fullpathdoc1
This is the first program that simply prints this statement.
我希望能够打印出进程名称,并说在成功执行每个命令行参数之后,该进程已完成。由于某种原因,我的输出导致所有内容似乎都向后执行,我的进程完成的消息首先出现,并且从右向左读取命令行。有人可以帮忙我的代码吗,我该如何纠正?
解决方法
当有多个进程时,哪个进程首先运行完全取决于您的操作系统(Linux)。
,广泛地说,父进程-fork()
返回> 0
的地方-需要等待子进程完成。请记住,对execvp()
的三个调用会导致三个并行的进程。因此,如果您不监视它们,它们将以他们自己的方式进行。已经在SO上对此问题进行了讨论: