[英]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.