状況はこんな感じです。コンピュータを家に置いて、ある2TBハードドライブから別の2TBハードドライブに再同期しました(どちらもUSB 2.0なので時間がかかります)。私は今職場にいて、SSH経由で自宅のコンピュータに接続しました。これにより、ps aux | grep rsync
次のことがわかります。
1000 7214 18.8 0.1 30636 1368 pts/0 S+ 00:52 134:00 rsync -vr /media/master /media/slave
しかし、私はrsyncが実際に何をしているのか見たかったです。自宅にいるときに標準出力が端末に表示され、rsyncの詳細モードは現在コピーされているファイルを示します。異なるポイントの標準出力を読み取る方法はありますか?
$ ps -t pts/0
7214 pts/0 02:14:42 rsync
Googleを試してみると/proc/pid/fd
答えがあるようですが、よくわかりません...
PS:もちろん、sudo権限があります。
答え1
実行しgdb -p 7214
、次の操作を行います。
p dup2(open("/dev/pts/your-pts-number", 1), 1)
detach
quit
完全には明確ではありませんが、接続されたプロセスの標準出力を最初の行に指定されたパス(この場合は目的のポイント)にリダイレクトします。
答え2
これストレスこのツールを使用すると、特定のファイル記述子(この場合はstdoutとstderr)に送信された出力のコピーを取得できます。
strace -e write=1,2 -e trace=write -p 7214
これは16進ダンプ形式で表示されます。
答え3
rsync
端末からプロセスを切り離して現在の端末に移動できます。バラより実行中のプロセスであることを拒否し、新しいスクリーンシェルに接続するにはどうすればよいですか?。基本的なアプローチは次のとおりです。John Flatnessの答えのgdbコマンドしかし、次のようなニールズそしてレティさらに頑丈になりました。
プロセスを画面またはtmuxセッションにインポートして再度分離する必要がないようにしてください(すでにこの機能を提供するneercsを使用していない限り)。
もう一つの方法は、開いているファイルを見て、プロセスが今何をしているのかを確認することです。lsof
あなたに言うでしょう。
lsof -p7214
答え4
BSDチェックインwatch
注文する。
それ以外の場合は、次の例を確認してくださいstrace
(7214
PIDはどこにあります)。
strace -e trace=write -s1000 -fp 7214 2>&1 \
| grep --line-buffered -o '".\+[^"]"' \
| grep --line-buffered -o '[^"]\+[^"]' \
| while read -r line; do
printf "%b" $line;
done
詳細な説明や例については、以下を確認してください。別のbashセッションで実行されているプロセスの出力をどのように表示できますか?