CP実行の進行状況を確認するには?

CP実行の進行状況を確認するには?

cpプロセス実行の進行状況を確認できますか?いくつかのプロセスは、様々なKILL信号に応答して状態を確認することができる。 -vパラメータを使用してcpを実行できることを知っていますが、これを忘れた場合は、cpが長い間実行され、どのファイルがコピーされているか、またはどのくらいのファイルがコピーされたかを知りたいと思います。

答え1

最新バージョンのMac OS Xでは、CTRL+を押すとT進行状況を確認できます。 ~からOSX 10.6 cp(1) マニュアルページ:

 "If cp receives a SIGINFO (see the status argument for stty(1)) signal,
 the current input and output file and the percentage complete will be
 written to the standard output."

BSDスタイルシステム(OSXを含む)でCTRL+をクリックすることは、TSIGINFOを使用して現在のプロセスにシグナルを送信するのと同じです。

これは以下に適用されます。仕事(1)しかも。

私はLinuxにこれらのSIGINFOメカニズムがないと思います。cp(1) の GNU マニュアルページ進行状況を報告するために使用できるシグナルについて説明します。

答え2

はい、ターゲットファイルとローカルファイルに対してstatを実行してファイルサイズを取得した場合

つまりstat -c "%s" /bin/ls

2つの値を比較して、複製されたデータの割合を取得できます。

非常に基本的な実装では、次のようになります。

function cpstat()
{
  local pid="${1:-$(pgrep -xn cp)}" src dst
  [[ "$pid" ]] || return
  while [[ -f "/proc/$pid/fd/3" ]]; do
    read src dst < <(stat -L --printf '%s ' "/proc/$pid/fd/"{3,4})
    (( src )) || break
    printf 'cp %d%%\r' $((dst*100/src))
    sleep 1
  done
  echo
}

答え3

多数のファイルをコピーするとき、du -s /path/to/destinationまたはfind /path/to/destination | wc -lどれだけの作業が行われたかについてのアイデアを提供するため。

lsof -p1234プロセスID 1234で、どのファイルがコピーされているかを確認できますcp。多くのシステムでは、名前付きのpgrep -x cpすべての実行プロセスのプロセスIDが報告されますcp。特定のディレクトリ内でファイルがコピーされる順序は本質的に予測できないため、これはあまり役に立ちません(Linuxの大規模ディレクトリではls --sort=noneこの方法でわかります。ディレクトリツリーの場合はお試しくださいfind)。

lsof -p1234cpまた、現在のファイルについて、その列で読み書きしたバイト数も表示しますOFFSET

LinuxにはIO使用統計があります(再び/proc/$pid/ioプロセスのPIDを使用します)。この値は、プロセスが読み取ったバイト数の合計で、プロセスが書き込んだバイト数です。これには、ファイルのデータだけでなく、ディレクトリのメタデータも含まれます。この数値を(ファイルデータのみを計算)して得られたおおよその数値と比較することができます。ストレージから読み書きした内容のみが含まれます。つまり、端末診断とすでにキャッシュにあるデータ、またはまだバッファにあるデータは除外されます。cp$pidfrcharwchardu /path/to/sourceread_byteswrite_bytes

答え4

(Linuxで)私の好きな方法の1つは、プロセスのPIDを調べてcpps | grep cpPIDなどを使用して)/proc/$PID/fd/合計を表示することです/proc/$PID/fdinfo/

$ cp -r y z
^Z
$ ls -l /proc/8614/fd
lrwx------ 1 jander jander 64 Aug  2 15:21 0 -> /dev/pts/4
lrwx------ 1 jander jander 64 Aug  2 15:21 1 -> /dev/pts/4
lrwx------ 1 jander jander 64 Aug  2 15:20 2 -> /dev/pts/4
lr-x------ 1 jander jander 64 Aug  2 15:21 3 -> /home/jander/y/foo.tgz
l-wx------ 1 jander jander 64 Aug  2 15:21 4 -> /home/jander/z/foo.tgz

これにより、プロセスで開いているファイルが表示されます。プロセスがファイルのどの程度まで進行しているかを確認するには...

$ cat /proc/8614/fdinfo/3
pos:    105381888
flags:  0500000

引数はpos読み取り(または書き込み)ポインタの位置(バイト)です。

関連情報