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
두 값을 비교하여 복제된 데이터의 백분율을 얻을 수 있습니다.
매우 기본적인 구현에서는 다음과 같습니다.
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 -p1234
cp
또한 현재 파일에 대해 해당 열에서 읽고 쓴 바이트 수를 알려줍니다 OFFSET
.
Linux에는 IO 사용 통계가 있습니다(다시 /proc/$pid/io
프로세스의 PID를 사용함). 이 값은 프로세스가 읽은 총 바이트 수이자 프로세스가 쓴 바이트 수입니다. 여기에는 파일의 데이터뿐만 아니라 디렉터리의 메타데이터도 포함됩니다. 이 숫자를 (파일 데이터만 계산)하여 얻은 대략적인 숫자와 비교할 수 있습니다. 스토리지에서 읽거나 쓴 내용만 포함됩니다. 즉, 터미널 진단과 이미 캐시에 있거나 아직 버퍼에 있는 데이터는 제외됩니다.cp
$pidf
rchar
wchar
du /path/to/source
read_bytes
write_bytes
답변4
(Linux에서) 제가 가장 좋아하는 방법 중 하나는 프로세스의 PID를 알아내고 cp
( ps | grep cp
PID 등을 사용하여) /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
읽기(또는 쓰기) 포인터의 위치(바이트)입니다.