これが状況です。私は2TBのハードドライブから別の2TBのハードドライブへのrsyncを実行しているPCを自宅に置いたままにしました(どちらもUSB 2.0であるため、しばらく時間がかかります)。私は今仕事をしていて、自宅のPCにssh-edしています。私が行った場合 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
私は少しググリングをしました、そしてそれは/proc/pid/fd
は答えを持っているかもしれませんが、これについてはよくわかりません...
追伸もちろん、Sudo権限があります。
gdb -p 7214
を実行して、次のようにします。
p dup2(open("/dev/pts/your-pts-number", 1), 1)
detach
quit
これは明確ではありませんが、アタッチしたプロセスのstdoutを最初の行で指定したパス(この場合は目的のpts)にリダイレクトします。
straceツールを使用すると、特定のファイル記述子(この場合はstdoutとstderr)に送られる出力のコピーを取得できます。
strace -e write=1,2 -e trace=write -p 7214
これは16進ダンプ形式で表示されます。
rsync
プロセスをターミナルから切り離して、現在のプロセスに移動できます。 実行中のプロセスを否認して新しい画面シェルに関連付けるにはどうすればよいですか? を参照してください。基本的なアプローチは John Flatnessの回答のgdbコマンド に似ていますが、 neercs や retty などのツールの方が堅牢です。
プロセスを画面またはtmuxセッションにインポートするようにしてください。これにより、プロセスを再び切り離す必要がなくなります(この機能をすでに提供しているneercsを使用している場合を除く)。
別のアプローチは、プロセスが開いているファイルを確認することにより、プロセスが現在何をしているかを確認することです。 lsof
と表示されます。
lsof -p7214
事前にこれを行いたいことがわかっている場合...
ホームコンピューターでスクリプトセッションを作成します(-fを使用してバッファーをフラッシュします)。
script -f output.txt
rsync -vr /media/master /media/slave
(Ctrl+D 帰宅したらスクリプトセッションを終了します)
職場では、output.txtを追跡できます。
tail -f output.txt
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セッションで実行中のプロセスの出力を表示する方法