バックグラウンドプロセスの出力リダイレクト

バックグラウンドプロセスの出力リダイレクト

目的:プログラムをバックグラウンドで(PIDを使用して)実行し、PIDをキャプチャし、出力を収集し、PIDを終了します。

私のコード:

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

さまざまなリダイレクトオプションを実行しましたが、出力を「ログ」にインポートできないようです。

また、別のスレッドで述べた方法を試しましたが、次のことをお勧めします。

program &> log & 

うまく動作しますが、「プログラム」の出力をキャプチャできないようです。

「プログラム」もインタラクティブで、数秒でコマンドを出力するので、完了するのに十分な時間を与えるために睡眠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_file10秒後に閉じる必要があります。 10秒になる前に特別な出力が発生した場合は、より一般expect的なプログラム出力を検出してその出力を検出し、発生時にプログラムを閉じたり終了したりできます。

おすすめ記事