我的运行进程使用getchar()处理stdin.我在前台运行时工作正常.但是,如果我在后台运行它并回显“a”>> / proc / pid / fd / 0它不起作用.在我的系统上,/ proc / pid / fd / 0与/ proc / pts / 0相同,那么如何发送进程的stdin以便getchar()可以看到它?我在C over ssh工作.
解决方法:
当你在后台运行多个程序时,它们仍然有/ dev / pts / XX作为它们的控制终端(和stdin),但它们不再有资格从它读取 – 只有shell或前台任务可以做到这一点.如果他们这样做,他们将获得停止后台进程的SIGTTIN信号:
myaut@zenbook:~$cat &
[1] 15250
myaut@zenbook:~$
[1]+ Stopped cat
这种行为的推理很简单:从一个源读取的多个程序导致race condition.I.e.当你输入shell我是谁时,shell将读取谁,后台任务#1将读取上午而任务#2将读取i.
解决方案很简单 – 不要使用伪终端在进程之间传输数据:
>使用管道 – 未命名或命名(使用mkfifo).它们就像从stdin读取一样简单.现代贝壳还提供了允许避免命名管道的协同处理.
>在复杂情况下使用UNIX套接字
>如果您仍需要伪终端,请使用屏幕或其他终端仿真器为您的程序创建一个新终端.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。