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 -p1234
1234는 프로세스 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_bytes
및 write_bytes
전용, 읽기 또는 저장에서 기록 된 내용을 포함 이미 캐시 또는 정지 버퍼 터미널 진단 및 데이터를 제외 즉.
답변
정확하게 진행 되는 비교적 새로운 도구 (이전의 cv [coreutils viewer]).
무엇입니까?
이 도구는 시스템에서 현재 실행중인 coreutils 기본 명령 (cp, mv, dd, tar, gzip / gunzip, cat 등)을 찾는 Tiny, Dirty, Linux 및 OSX 전용 C 명령으로 설명 할 수 있습니다. 복사 된 데이터의 백분율을 표시합니다.
어떻게 작동합니까?
그것은 단순히 스캔
/proc
흥미로운 명령에 대해 다음 디렉토리에서 찾습니다fd
및fdinfo
열 파일을 찾을 수 및 위치를 추구하는, 가장 큰 파일의 상태를보고합니다.
답변
(리눅스에서)이 내 좋아하는 트릭 중 하나는의 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는 복사되는 양과 전송 속도를 알려줍니다. 동일한 시스템 또는 네트워크에서 단일 파일 또는 폴더에 모두 작동합니다.