簡體   English   中英

Bash I / O重定向

[英]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”進程,但我想在父進程中獲取它。 所以我有幾個問題:

  1. 以下命令中的符號“ @”是什么意思(也許您可以獲得鏈接)?
  2. 如何使I / O重定向到Tcl進程?
  3. 如果Tcl進程意外停止,如何停止子進程(例如ping)?

>@ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM