상황은 이렇습니다. 컴퓨터를 집에 두고 한 2TB 하드 드라이브에서 다른 2TB 하드 드라이브로 재동기화했습니다(둘 다 USB 2.0이므로 시간이 좀 걸립니다). 저는 지금 직장에 있고 SSH를 통해 집 컴퓨터에 연결했습니다. 이렇게 하면 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 권한이 있습니다.
답변1
실행 gdb -p 7214
하고 다음을 수행합니다.
p dup2(open("/dev/pts/your-pts-number", 1), 1)
detach
quit
완전히 명확하지는 않지만 연결한 프로세스의 표준 출력을 첫 번째 줄에 제공된 경로(이 경우 원하는 지점)로 리디렉션합니다.
답변2
이것스트레스이 도구를 사용하면 특정 파일 설명자(이 경우 stdout 및 stderr)로 전송된 출력의 복사본을 얻을 수 있습니다.
strace -e write=1,2 -e trace=write -p 7214
이는 16진수 덤프 형식으로 표시됩니다.
답변3
rsync
터미널에서 프로세스를 분리하고 현재 터미널로 이동할 수 있습니다 . 바라보다실행 중인 프로세스임을 거부하고 새 화면 셸에 연결하려면 어떻게 해야 합니까?. 기본적인 접근 방식은 다음과 같습니다.John Flatness의 답변에 있는 gdb 명령, 그러나 다음과 같은닐스그리고레티더욱 견고해졌습니다.
프로세스를 화면이나 tmux 세션으로 가져와서 다시 분리할 필요가 없도록 하세요(이미 이 기능을 제공하는 neercs를 사용하지 않는 한).
또 다른 방법은 열려 있는 파일을 살펴봄으로써 프로세스가 지금 무엇을 하고 있는지 확인하는 것입니다.lsof
당신에게 말할 것입니다.
lsof -p7214
답변4
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 세션에서 실행 중인 프로세스의 출력을 어떻게 볼 수 있나요?