[英]Run a command from a script directly to another process
我目前正在研究与其他进程进行交互的脚本。 如果相关,则所述过程是simdebug控制台。 我想要的是正确退出它,因为当我杀死进程本身时,它会创建一个锁定文件.lck。 Simdebug控制台正在等待输入,并在接收到quit之后关闭,然后依次按下q和n(分别由回车按键来验证命令)。
我设法使用发送了一些命令到Simdebug
echo quit > /proc/< PID >/fd/1
但是它只打印回显的结果,我找不到发送回车按键的方法,只有新行'\\ n'。
我不能设法发送一个退出命令,该命令将直接在Simdebug中执行,而不是在发送该命令的终端中执行。
如果回答了这两点之一,我的问题就会解决:
是否有可能模拟验证按键,如下所示:术语1:echo ifconfig; echo <enter keypress>然后执行术语2的读取缓冲区中的内容
有没有办法在另一个过程中已经执行命令
条款1:<未知语法> pwd
术语2 <显示term2的pwd而不是term1>
这将不仅在终端之间运行,而且在读取模式下已经打开了进程。
这实际上是一件很难的事情。 如果将字符从另一个主终端发送到/ 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
进程。 https://github.com/nelhage/reptyr
http://theterminallife.com/sending-commands-into-a-screen-session/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.