[英]Bash I/O redirection
我當前任務的主要問題是從Tcl環境(使用exec cmd。)啟動進程,並通過I / O重定向到父進程(Tcl),並且當父進程意外停止時,我想自動停止子進程。 但是有一個警告:對於I / O重定向,子進程不會停止。 這個問題很復雜,因為子進程無法修改。
我找到了下一個線程如何在父級退出后使子級進程死亡? 在哪里找到了C語言的解決方案,並且沒有I / O重定向。
因此,例如,我在Tcl中使用下一個命令:
exec ping $SERVER_NAME >@ stdout 2>@ stderr
此命令將stdout和stderr的輸出重定向到父進程(Tcl)。 但是我需要運行類似的東西:
exec sh -c "set -o monitor; ping $SERVER_NAME >@ stdout 2>@ & read dummy; kill %1"
在上面的命令中,stdout和stderr的輸出進入“ sh”進程,但我想在父進程中獲取它。 所以我有幾個問題:
>@ stdout
的意思是不收集命令就將命令的輸出發送到Tcl進程的標准輸出。 2>@ stderr
的含義是不收集命令就將命令的標准錯誤流發送到Tcl進程的標准錯誤(如果它收集的是非空內容,則將導致錯誤)。 考慮在子流程調用中復制它,甚至以bash進行復制,也會使我的頭受傷! 我懷疑您不能那樣做。
這樣處理可能會更容易:
set pid [exec exec ping $SERVER_NAME >@ stdout 2>@ stderr &]
# and when you want to stop it...
exec kill $pid
要完成更完整的工作,將需要使用TclX軟件包的signal
命令。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.