如何解决如何在一个程序中使用多个fork
我显然在熨叉时遇到麻烦。我有一些代码,早期我会毫无问题地使用以下技术,但后来会导致可怕的递归错误,因此显然我对fork的理解还差得远。无论我按什么顺序执行,都只会执行第一个,而第二个显然不执行任何操作。如果有人能解释原因,甚至只是给我提供一个如何使用这样的多个fork的示例,我将不胜感激
#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);
}
edit:我逐步使用GDB,并将关注模式设置为DD=fork();
行之前的子级,并且DD是子进程(0)中的正确值,但是当我越过execv时没有任何反应线。非常令人困惑
解决方法
C不支持零长度数组,所以如果这样...
char *arg[0];
...进行编译,这仅是因为您正在行使由特定C实现提供的语言扩展。无论如何,您在这里没有用,因为execv()
的第二个参数必须指向以null终止的参数数组的第一个元素,该数组至少包含一个参数(按照惯例,其名称程序)。 arg
至少需要两个元素来容纳该元素,再加上空指针终止符。
当我跨过execv行时什么也没发生
否,发生未定义的行为。我推测execv()
失败了,可能是由于参数列表错误,您可能没有注意到返回值,所以很难注意到这一点。据推测,如果执行程序失败,您想通过_Exit()
以非零退出状态{子进程}退出。无论如何,那将是通常的做法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。