ジョブを実行するだけです (foo.sh を想定)。
./foo.sh
[Press Ctrl-Z to stop]
bg # enter background
そして、stdout と stderr に出力を生成します。現在の画面ではなく、他のファイルに stdout と stderr をリダイレクトする方法はありますか?
答え1
どうやら最初にあなたの質問を読み間違えたようですので、更新した回答は次のとおりです:
プログラムをバックグラウンドに送った後、まずそのPIDを見つける必要があります。
pgrep foo.sh
gdb
次に、そのプロセスにアタッチするために使用できます
gdb -p <PID>
次にgdb
、このプログラムが書き込む場所を変更します
p dup2(open("/path/to/file",577, 420), 1)
p dup2(1, 2)
その後、プロセスから切り離して終了しますgdb
detach
quit
ちょっとした説明
577
は以下と同等であるO_CREAT|O_WRONLY|O_TRUNC
420
は以下と同等であるS_IRUSR|S_IWUSR|S_IRGRP|S_IROTH
- したがって、呼び出しは
open
ファイルを開き、存在する場合は0バイトに切り捨て、存在しない場合は適切なファイル権限で新しいファイルを作成します。 - 最初の の呼び出しは、
dup2
の呼び出しによって返されたファイル記述子をopen
ファイル記述子1
(stdout
)に複製します。 - 2回目の呼び出しでは、
dup2
ファイル記述子を()1
に複製します。2
stderr