cp 실행 진행 상태를 확인하는 방법은 무엇입니까? 있습니까? 일부 프로세스는 다양한 KILL 신호에 응답하여

cp 프로세스 실행 진행 상황을 확인할 수 있습니까? 일부 프로세스는 다양한 KILL 신호에 응답하여 상태를 확인할 수 있습니다. 나는 매개 변수 -v를 사용하여 cp를 실행할 수 있다는 것을 알고 있지만 그렇게 잊어 버린 경우 cp가 매우 오랫동안 실행 중이며 복사중인 파일 또는 이미 복사 된 파일 수를 알고 싶습니다.



답변

예, 대상 파일과 로컬 파일에서 stat를 실행하고 파일 크기를 가져옵니다.

stat -c "%s" /bin/ls

그리고 두 값을 비교하여 복사 한 데이터의 백분율을 얻습니다.

다음과 같은 매우 기본적인 구현에서 :

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
}


답변

최신 버전의 Mac OS X에서는 CTRL+ T를 눌러 진행 상황을 확인할 수 있습니다 . cp (1)OSX 10.6 매뉴얼 페이지에서 :

 "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."

Hitting CTRL+ T는 OSX를 포함하여 BSD-ish 시스템에서 SIGINFO로 현재 프로세스를 시그널링하는 것과 같습니다.

이것은 dd (1) 에서도 작동 합니다.

나는 리눅스가이 SIGINFO 메커니즘을 가지고 있다고 생각하지 않으며, cp (1)대한 GNU 매뉴얼 페이지에서 진행 상황을보고하는 데 사용될 수있는 신호에 대해서는 아무것도 보지 못한다 .


답변

많은 파일을 복사 du -s /path/to/destination하거나 find /path/to/destination | wc -l이미 수행 한 작업에 대한 아이디어를 제공합니다.

lsof -p12341234는 프로세스 ID 인에서 어떤 파일을 복사하고 있는지 확인할 수 있습니다 cp. 많은 시스템에서 pgrep -x cp라는 모든 실행중인 프로세스의 프로세스 ID를보고합니다 cp. 주어진 디렉토리 안에있는 파일들이 복사되는 순서는 예측할 수 없기 때문에이 방법은 그다지 유용하지 않을 수 있습니다 (리눅스의 큰 디렉토리 ls --sort=none에서는 디렉토리 트리를 사용해보십시오 find).

lsof -p1234또한 열 cp에서 현재 파일에 대해 이미 읽고 쓴 바이트 수를 알려줍니다 OFFSET.

Linux에서는 IO 사용 통계가 있습니다 /proc/$pid/io(에 대한 cp프로세스 의 PID 사용 $pidf). rchar값 처리는 읽기 바이트의 총 수이고, wchar프로세스가 작성한 바이트 수이다. 여기에는 파일의 데이터뿐만 아니라 디렉토리의 메타 데이터도 포함됩니다. 해당 수치를 du /path/to/source(파일 데이터 만 계산하는) 획득 한 대략적인 수치와 비교할 수 있습니다 .
read_byteswrite_bytes전용, 읽기 또는 저장에서 기록 된 내용을 포함 이미 캐시 또는 정지 버퍼 터미널 진단 및 데이터를 제외 즉.


답변

정확하게 진행 되는 비교적 새로운 도구 (이전의 cv [coreutils viewer]).

무엇입니까?

이 도구는 시스템에서 현재 실행중인 coreutils 기본 명령 (cp, mv, dd, tar, gzip / gunzip, cat 등)을 찾는 Tiny, Dirty, Linux 및 OSX 전용 C 명령으로 설명 할 수 있습니다. 복사 된 데이터의 백분율을 표시합니다.

어떻게 작동합니까?

그것은 단순히 스캔 /proc흥미로운 명령에 대해 다음 디렉토리에서 찾습니다 fdfdinfo열 파일을 찾을 수 및 위치를 추구하는, 가장 큰 파일의 상태를보고합니다.


답변

(리눅스에서)이 내 좋아하는 트릭 중 하나는의 PID 발견하는 것입니다 cp(사용 과정 ps | grep cp또는 이와 유사한 것), 다음에보고 /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파라미터 바이트 판독 (또는 기록) 포인터의 위치이다.


답변

당신이 할 수있는 몇 가지가 있습니다. 당신 strace은 무엇을하고 있는지 볼 수 있습니다.

strace -p [cp의 pid]

또는 lsof현재 열려있는 파일을 알려줄 수 있습니다.

lsof -p [cp의 pid]

큰 재귀를 실행하는 경우 현재 작업 디렉토리를 얻는 데 cp사용할 수 있습니다 pwdx.

pwdx [cp의 pid]


답변

OP는 “cp”명령이 어떻게 진행되고 있는지 확인할 수있는 기능을 구체적으로 언급했지만 다른 유틸리티가이 특정 문제에 더 적합하다고 말해야합니다.

예를 들면 다음과 같습니다.

rsync -avP FROM TO

FROM 파일 / 폴더를 TO 파일 / FOLDER로 복사하는 과정을 보여줍니다.


# rsync -avP Video.mp4  /run/media/user1/3.8G/

sending incremental file list
Video.mp4
    565,170,046 100%   51.23MB/s    0:00:10 (xfr#1, to-chk=0/1)

sent 565,308,115 bytes  received 134 bytes  5,210,214.28 bytes/sec
total size is 565,170,046  speedup is 1.00

그리고 rsync는 복사되는 양과 전송 속도를 알려줍니다. 동일한 시스템 또는 네트워크에서 단일 파일 또는 폴더에 모두 작동합니다.