0

我有一个模拟 shell 的程序,我正在创建一个在后台运行的可能性,当我使用 FORK -> EXEC 运行另一个进程时,它有时仍然会得到输入(上下文切换或 smthng)我想完全阻止我的进程shell 使其与 linux 中的 & 运算符完全一样。我正在寻找带有信号的解决方案,但找不到任何方法。有什么建议么?

            if((son = fork())==0){//son process
            getcwd(cur, 1024);
            strcat(cur, "/");
            strcat(cur, tokens_set[0]);
            tokens_set[0] = cur;
            i = execvp(tokens_set[0],tokens_set); //run the command
            if(i == (-1)){
                perror("couldn't find the command: ");
            }
            exit(0);

        }else{ // father process

            printf("and father proccess goes on\n");
        }

然后父进程继续,子进程只是一个获取输入-> 打印相同的程序。在我的情况下,有时父亲得到输入,有时得到儿子。同样,当我使用 valgrind 运行时,儿子总是得到输入。

4

1 回答 1

1

以防止您的子进程获得输入。我认为您可以尝试dup2在子进程中使用将标准输入重定向到 null 。

int fd = open("/dev/null", O_RDONLY);
dup2(fd, STDIN_FILENO);
close(fd);
于 2013-11-14T18:42:55.400 回答