【发布时间】:2020-09-17 20:05:54
【问题描述】:
我显然无法熨平叉子。我有代码,我在早期使用以下技术没有问题,但后来它会导致可怕的递归错误,所以很明显我对分叉的理解有些偏离。不管我把这些放在什么顺序,只有第一个会执行,第二个显然什么都不做。如果有人能解释原因,或者甚至只是指出如何使用这样的多个分叉的示例,我将不胜感激
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(){
int DD, EE;
char *arg[0];
EE=fork();
if (EE==0)
execv("EE",arg);
DD=fork();
if (DD==0)
execv("DD",arg);
exit(0);
}
编辑:我使用 GDB 并在 DD=fork(); 行之前将跟随模式设置为 child,并且 DD 是子进程(0)中的正确值,但是当我跨过 execv 行时没有发生任何事情。很混乱
【问题讨论】:
-
在我看来,传递给
execv()的参数是一个未初始化的数组。我认为,至少,arg需要包含至少两个条目,第一个通常与可执行文件名匹配,第二个是NULL。 -
您期望发生什么? Execv 用您传递的参数替换当前进程的图像。
./EE是做什么的? -
@TonyTannous 两个文件都将内容打印到 cmd,但如果相关,DD 会执行一个 linux 命令来执行此操作(ps -u [我的用户名])
-
char *arg[0];是大小为零的数组的定义。这不是合法的 C -
@KevinBoone 语法是 execv(char * programName, char * arguments[]。我会尝试添加一个 NULL,但如果这是问题,我会非常惊喜