重定向後台程序的輸出

重定向後台程序的輸出

目標:讓程式在背景運行(帶有 PID),捕獲 PID,收集輸出並殺死 PID。

我的程式碼:

tee -a log | program | tee -a log &
PID=$!
disown $PID
sleep 10
pkill '^program*' 2> /dev/null

我運行了各種不同的重定向選項,但我似乎無法將輸出發送到“log”。

我還嘗試了另一個線程中提到的方法,建議使用:

program &> log & 

儘管運行良好,但它似乎無法捕獲“程式”的輸出。

「程式」也是互動式的,它會在幾秒鐘內輸出命令,這就是為什麼我有 sleep 10 給它足夠的時間來完成。

有小費嗎?

謝謝你!

答案1

expect

#!/usr/bin/env expect

package require Tcl 8.5

proc time_to_die {sid} {
    close $sid
    # if close is insufficient (e.g. the program is badly behaved) may
    # need to instead get and blast away at the pid
    #set pid [exp_pid $sid]
    #exec kill $pid
    exit
}

# spam output to this here file
log_file log

spawn -noecho TODOyourprogramhereFIXME

# and this here is in milliseconds
after 10000 [list time_to_die $spawn_id]

vwait godot

它應該在 PTY 中運行程序,透過呼叫收集其輸出log_file,並在 10 秒後關閉它。如果在 10 秒結束之前發生獨特的輸出,則可以透過更典型的expect程式輸出檢測來檢測該輸出並在發生這種情況時關閉或終止程式。

相關內容