c - 为什么我的子进程在没有实际终止的情况下退出?
问题描述
我正在写一个关于进程的程序
该进程接受 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;
}
解决方案
第一的:
//delete argv 0 for convincent
argv[i] = argv[i + 1];
我会给我们一个带有边界 [argc+1] 的新数组,否则您将面临数组越界错误(缓冲区溢出)的危险。
第二:调用的bash命令很重要。有些命令只是启动一个守护进程并自行完成。
推荐阅读
- java - 将列表转换为数组并返回
- go - 在golang中将对象从一个包传递到下一个包
- magento2 - 在客户地址中添加新的自定义地址类型(付款人),例如 magento2 中的计费和运输
- r - R如何在group_by之后仅替换列中的连续重复值
- javascript - 使用 Vanilla JS 的 Ionic Routig
- java - 为什么 java.ci.totalTime 比 sun.rt.safepointTime (JVM PerfCounters) 大?
- ios - iOS Shortcuts App 是否有快捷方式建议限制?
- javascript - 如何将值从状态传递到另一个组件
- r - 如何解决等长向量的增益误差
- python - 康威的生命游戏创造棋盘和开启细胞