我的运行过程使用getchar()处理stdin。当我在前台运行它的时候,它工作得很好。但是,如果我在后台运行它并执行echo "a">> /proc/pid/fd/0,它将无法工作。在我的系统中,/proc/pid/fd/0和/proc/pts/0一样,所以我如何发送到进程的stdin,以便getchar()能够看到它?我在C++的ssh工作。
发布于 2015-04-10 07:49:28
当您在后台运行多个程序时,它们仍然以/dev/pts/XX作为它们的控制终端(和stdin),但是它们不再有资格读取它--只有shell或前台任务才能做到这一点。如果他们这样做了,他们将得到停止后台进程的SIGTTIN信号:
myaut@zenbook:~$ cat &
[1] 15250
myaut@zenbook:~$
[1]+ Stopped cat这种行为的原因很简单:从一个源读取多个程序会导致种族条件。也就是说,当您输入shell who am i时,shell将读取who,后台任务#1将读取am,任务2将读取i。
解决方案很简单--不要使用伪终端在进程之间传输数据:
mkfifo一起使用)。它们就像从stdin上读到的一样简单。现代shell还提供了避免命名管道的协同进程。screen或其他终端模拟器为您的程序创建一个新的终端。https://stackoverflow.com/questions/29552203
复制相似问题