我有一个模拟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一起跑时,儿子总是得到输入。
答案 0 :(得分:1)
防止您的子进程获取输入。我想您可以尝试使用dup2
将stdin重定向到子进程中的null。
int fd = open("/dev/null", O_RDONLY);
dup2(fd, STDIN_FILENO);
close(fd);