gpt4 book ai didi

c - 结束子进程而不返回值

转载 作者:行者123 更新时间:2023-11-30 15:10:40 25 4
gpt4 key购买 nike

我基本上是在创建一个函数,该函数调用unix内置函数并将其输出重定向到“myexec.txt”。所以我在子进程中调用了opendup2。它们将 execve 的输出重定向到 “myexec.txt”。调用 execve 后,子进程将终止,执行 execve 后的所有其他标准输出现在都将定向到终端。我正在寻找一种方法,在调用 execve 失败的情况下终止子进程,以便停止输出重定向到 myexec.txt。我知道使用 exit 有效,但是有没有办法在不返回值的情况下终止此进程?我的函数需要返回void

这是我的代码块。我故意给 execve 一个不存在的路径。

void myexec()
{
pid_t pid;
pid = fork();
if(pid == 0)
{
printf("executing ls\n");
char *argv[] = {"ls", 0};
int fd = open("myexec.txt", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
dup2(fd, 1);
dup2(fd, 2);
close(fd);
execve("/bsin/ls", &argv[0], NULL);
fprintf(stderr, "Failed to execute");
......
}
wait(NULL);
printf("Function execution have been attempted");
}

最佳答案

不要调用exit。这是一个严重的错误,过去曾导致严重的错误,并带来重大的安全隐患。

调用_exit。你可以传递一个零,如果 parent 不关心 child 是成功还是失败,那并不重要。由于 _exit 保证不会返回,因此您无需在其后添加任何其他内容。

if(pid == 0)
{
printf("executing ls\n");
char *argv[] = {"ls", 0};
int fd = open("myexec.txt", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
dup2(fd, 1);
dup2(fd, 2);
close(fd);
execve("/bsin/ls", &argv[0], NULL);
fprintf(stderr, "Failed to execute");
_exit(EXIT_FAILURE);
}

关于c - 结束子进程而不返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36046471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com