【发布时间】:2021-12-05 18:38:29
【问题描述】:
我正在写一个关于进程的程序
进程接受 bash 命令并使用 exec 运行它
我使用 fork() 在其中创建子进程 run exec
并计划在父进程中做一些后期处理
但由于某种原因,exec 运行正常,但 wait 无法正常工作
“在这里后处理”打印放在 exec 的程序终止之前
以前可以用,突然不行了,
我不知道我做了什么改变导致这个问题
#include <stdio.h>
#include <sys/wait.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
/* code */
for(int i = 0; i < argc; i++){
//delete argv 0 for convincent
argv[i] = argv[i + 1];
}
int pid = fork();
if(pid == -1){
return 1;
}
if(pid == 0){
execvp(argv[0], argv);
}else{
wait(NULL);
printf("post process here");
}
return 0;
}
【问题讨论】:
-
当某些东西正常工作时,在您的版本控制系统中保存一个版本(您正在使用一个版本,不是吗?)。返回到以前的工作版本。找出你改变了什么。您还没有显示您为程序提供的命令行选项。您没有处理任何错误。您没有捕获
wait()返回的信息。您应该用换行符结束您的printf()语句。无需像您一样使用argv玩游戏。您可以改用execvp(argv[1], &argv[1]);。当(如果)execvp()返回时,您应该报告错误并以非零状态退出。
标签: c process operating-system