다른 지점의 표준 출력 보기 [중복]

다른 지점의 표준 출력 보기 [중복]

상황은 이렇습니다. 컴퓨터를 집에 두고 한 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( 7214PID는 어디에 있습니까).

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 세션에서 실행 중인 프로세스의 출력을 어떻게 볼 수 있나요?

관련 정보