>/proc/pid/fd/0 它将不起作用。在我的系统上,/pro-6ren">
gpt4 book ai didi

c++ - 如何从终端标准输入重定向到进程标准输入

转载 作者:IT王子 更新时间:2023-10-29 01:26:27 24 4
gpt4 key购买 nike

我的运行进程使用 getchar() 处理标准输入。当我在前台运行它时它工作正常。但是,如果我在后台运行它并执行 echo "a">>/proc/pid/fd/0 它将不起作用。在我的系统上,/proc/pid/fd/0/proc/pts/0 相同,那么我如何发送到进程的标准输入,以便 getchar() 可以看到吗?我正在通过 ssh 使用 C++。

最佳答案

当你在后台运行多个程序时,它们仍然有 /dev/pts/XX 作为它们的控制终端(和 stdin),但它们不再有资格从中读取——只有 shell 或前台任务可以做到这一点。如果他们这样做,他们将收到停止后台进程的 SIGTTIN 信号:

myaut@zenbook:~$ cat &
[1] 15250
myaut@zenbook:~$

[1]+ Stopped cat

这种行为的原因很简单:多个程序从一个源读取导致 race condition . IE。当你输入 shell who am i 时,shell 将读取 who,后台任务 #1 将读取 am,任务 #2 将读取

解决方案很简单——不要使用伪终端在进程间传输数据:

  • 使用管道——未命名或命名(使用mkfifo)。它们就像从 stdin 中读取一样简单。现代 shell 还提供了协同进程,可以避免使用命名管道。
  • 在复杂情况下使用 UNIX 套接字
  • 如果您仍然需要一个伪终端,请使用 screen 或其他终端模拟器为您的程序创建一个新终端。

关于c++ - 如何从终端标准输入重定向到进程标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29552203/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com