结束子进程而不返回值

时间:2016-03-16 20:38:48

标签: c

我基本上创建了一个函数,它调用内置函数的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");
}

1 个答案:

答案 0 :(得分:1)

请勿致电exit。这是一个严重的错误,过去曾造成严重的安全隐患。

致电_exit。您可以将它传递给零,如果父级不关心子级是成功还是失败,则无关紧要。由于_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);
}