如何从终端标准输入重定向到处理标准输入

用户3472537:

我正在运行的进程通过使用处理stdin getchar()当我在前台运行它时,它工作正常。但是,如果我在后台运行它,echo "a">> /proc/pid/fd/0它将无法正常工作。在我的系统上,/proc/pid/fd/0它与一样/proc/pts/0,那么如何发送到进程的stdin以便getchar()可以看到它呢?我正在通过ssh在C ++中工作。

myaut:

当您在后台运行多个程序时,它们仍然/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现代外壳程序还提供了避免使用命名管道的过程。
  • 在复杂情况下使用UNIX套接字
  • 如果仍然需要伪终端,请使用screen或其他终端仿真器为您的程序创建一个新的伪终端。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

重定向标准输入和标准输出?

将标准输入重定向到标准输入

如何从终端绘制标准输入?

如何重定向“ while”指令在文件上的标准输入?

如何从DART脚本中的键盘重定向标准输入?

如何注意到标准输入重定向到目录

将标准输入重定向到文件

两次重定向标准输入?

通过GUI重定向标准输入

重定向任务中的流程标准输入

在 bash 脚本中重定向标准输入和标准输出

重定向标准输出和标准输入-Java

将标准输入重定向到标准输出

如何使用boost.process重定向标准输入和标准输出

使用 git 推送时将“终端”重定向到“标准输入”

如果标准输入重定向,su为什么要求输入密码?如何避免这种情况?

使用带有标准输入和标准输出重定向的 2 进程管道时如何避免标准输入上的重复输入

如果它的标准输入已被重定向,是否可以获取bash脚本以接受来自终端的输入?

逐行处理标准输入

使用标准输入重定向交互地循环删除文件

将标准输入(读取主机)重定向到Powershell脚本

在bash脚本中动态重定向标准输入

将脚本标准输入重定向到后台文件

检查是否已经在Linux上重定向了标准输入?

管道和标准输入重定向到猫

posix标准输入重定向的位置(<in cmd vs cmd <in)

getline()在重定向的Linux标准输入上不起作用

Windows cmd输出重定向到标准输入(>&0)

从文件重定向输入,但也显示在标准输出中?