我正在运行的进程通过使用处理stdin getchar()
。当我在前台运行它时,它工作正常。但是,如果我在后台运行它,echo "a">> /proc/pid/fd/0
它将无法正常工作。在我的系统上,/proc/pid/fd/0
它与一样/proc/pts/0
,那么如何发送到进程的stdin以便getchar()
可以看到它呢?我正在通过ssh在C ++中工作。
当您在后台运行多个程序时,它们仍然/dev/pts/XX
作为控制终端(和stdin
),但是它们不再符合从中读取的权限,只有shell或前台任务可以执行此操作。如果这样做,他们将收到SIGTTIN
停止后台进程的信号:
myaut@zenbook:~$ cat &
[1] 15250
myaut@zenbook:~$
[1]+ Stopped cat
这种行为的原因很简单:从一个源读取多个程序会导致竞争状态。即,当您输入外壳程序时who am i
,外壳程序将读取who
,后台任务#1将读取,am
而任务#2将读取i
。
解决方案很简单-不要使用伪终端在进程之间传输数据:
mkfifo
)。它们就像从阅读一样简单stdin
。现代外壳程序还提供了避免使用命名管道的协过程。screen
或其他终端仿真器为您的程序创建一个新的伪终端。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句