阻止进程使用C进行输入

时间:2013-11-14 18:27:02

标签: c

我有一个模拟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");
        }

然后父进程继续,子进程只是一个get输入 - >打印相同的程序。在我的情况下,有时父亲得到输入,有时是儿子。当我和valgrind一起跑时,儿子总是得到输入。

1 个答案:

答案 0 :(得分:1)

防止您的子进程获取输入。我想您可以尝试使用dup2将stdin重定向到子进程中的null。

int fd = open("/dev/null", O_RDONLY);
dup2(fd, STDIN_FILENO);
close(fd);