首页 > 解决方案 > 为什么我的子进程在没有实际终止的情况下退出?

问题描述

我正在写一个关于进程的程序

该进程接受 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;
}

标签: cprocessoperating-system

解决方案


第一的:

//delete argv 0 for convincent
    argv[i] = argv[i + 1];

我会给我们一个带有边界 [argc+1] 的新数组,否则您将面临数组越界错误(缓冲区溢出)的危险。

第二:调用的bash命令很重要。有些命令只是启动一个守护进程并自行完成。


推荐阅读