我目前正在研究与另一个进程进行交互的脚本。 如果相关,则所述过程是simdebug控制台。我想要的是正确退出它,因为当我杀死进程本身时,它会创建一个锁定文件.lck。 Simdebug控制台正在等待输入,并在接收到quit之后关闭,然后依次按下q和n(分别由回车按键来验证命令)。
我设法使用
向Simdebug发送了一些命令echo quit > /proc/< PID >/fd/1
但是它只打印回显的结果,我找不到发送回车按键的方法,只有新行'\ n'。
我也无法发送直接在Simdebug中执行的退出命令,而不是在发送该命令的终端中执行的退出命令。
如果回答了这两点之一,我的问题就会解决:
是否可以模拟验证按键,如下所示: 术语1:echo ifconfig;回声<输入按键> 然后哪个将执行术语2的读取缓冲区中的内容
有没有办法像
第1项:<未知语法> pwd
第2项<显示的是第2项的密码,而不是term1>
不是仅在终端之间运行,而是在读取模式下已经打开的进程。
答案 0 :(得分:0)
这实际上是一个困难要做的事情。如果您从其他主终端向/ proc / self / fd / 0设备或类似的stdin设备链接发送字符,则它将仅将字符输出到其他进程的主终端的输出侧。
使用expect
或pdip
或screen
之类的工具,您可以将所需的任何内容发送到封装在其伪终端中的进程,就好像它来自其主终端一样。但是,如果某个进程正在运行,那么它将已经拥有自己的终端。
如果可以说服控制台使用reptyr
进行控制性终端传输,那么您会很幸运。
例如,如果您的控制台具有进程ID 999999(并且您已经安装了screen
和reptyr
,并且也许做了某些事情来安抚selinux或apparmor / yama保护):
screen -dmS automateconsole
screen -S automateconsole -p 0 -X stuff 'reptyr 999999^M'
screen -S automateconsole -p 0 -X stuff 'quit^M'
sleep 1s
screen -S automateconsole -p 0 -X stuff 'q^M'
sleep 1s
screen -S automateconsole -p 0 -X stuff 'n^M'
sleep 1s
screen -S automateconsole -p 0 -X stuff 'exit^M'
但请注意:
reptyr
从其他SSH会话进行进程。https://github.com/nelhage/reptyr
http://theterminallife.com/sending-commands-into-a-screen-session/