나는 A를 확인하려고 노력했다.인식되지 않음 curl
이전 로그인에서 시작된 프로세스입니다. 여전히 실행 중인 것을 볼 수 있습니다(PID 17193).
$ ps aux | grep curl
17193 jack 7700 3692 S 1:00 20:48 curl https://examples.com/file.ext -O
18124 jack 3576 876 S 0:00 21:18 grep curl
다운로드가 얼마나 진행되었는지 확인하려고 했지만 출력이 삭제되었습니다.
$ ls -l /proc/17193/fd
total 0
lrwx------ 1 jack users 64 May 19 20:50 0 -> /dev/pts/1 (deleted)
lrwx------ 1 jack users 64 May 19 20:50 1 -> /dev/pts/1 (deleted)
lrwx------ 1 jack users 64 May 19 20:50 2 -> /dev/pts/1 (deleted)
lrwx------ 1 jack users 64 May 19 20:50 3 -> socket:[2343571]
l-wx------ 1 jack users 64 May 19 20:50 4 -> /dir/file.ext
출력을 보려면 어떻게 해야 합니까? 감사해요!
답변1
쉽게 볼 수 있습니다:
cat /proc/17193/fd/1 ; tail -n 0 -f /proc/17193/fd/1
실제 리디렉션은 복잡합니다. 실행 중인 프로세스에 디버거를 연결하고 fd를 닫은 다음 새 파일을 열 수 있습니다. 하지만 활성 네트워크의 경우 연결이 끊어지는 것을 방지하려면 이 작업을 신속하게 수행해야 한다고 생각합니다.
답변2
JdeBP가 말했듯이 이는 디버거를 연결하지 않으면 불가능합니다. 다행히도 이 작업을 완전히 자동으로 수행할 수 있는 프로그램이 있습니다.렙텔이런 프로그램입니다. 실행하면 reptyr 17193
터미널에 다시 연결됩니다.
답변3
디버거 없이는 불가능합니다.
프로그램의 표준 출력과 표준 오류는 마스터 측이 닫은 의사 터미널의 슬레이브 측으로 전송됩니다. 프로세스 디버깅 및 시스템 호출 가로채기와 같은 극단적인 조치 외에는 출력에 액세스할 수 있는 방법이 없습니다.
이것이 터미널의 의미입니다.
X11 터미널 에뮬레이션 터미널을 계속 참조하는 프로세스의 열린 파일 설명자는 다음과 같습니다.고의로더 이상 I/O를 일으키거나 어떤 것에도 연결하지 않습니다. 이것은 일반적으로 터미널 장치에서 파일 설명자를 열고 이를 사용하여 터미널의 다음 사용자에게 잘못된 로그인 프롬프트를 제공하는 트로이 목마에 맞서기 위한 Unix 방법입니다.
이로 인해 이미 tmux
GNU Screen, mosh 또는console-terminal-emulator
의사 터미널의 기본 측면을 열어두고 터미널의 디스플레이와 입력을 에뮬레이트하며 분리 및 재연결이 가능한 클라이언트/구현자 프로세스(즉, tmux
GNU 화면의 "클라이언트" 부분, mosh 클라이언트 또는console-fb-realizer
,console-termio-realizer
또는 이와 유사한 것)을 사용하여 실제 장치로 렌더링합니다.
따라서 tmux
재연결을 원할 경우 GNU Screen, mosh, nosh 도구 세트의 사용자 공간 가상 터미널 또는 기타 유사한 시스템을 사용하십시오.
추가 읽기
- 푸티.NetBSD 커널 인터페이스 매뉴얼. 2013년 11월 13일.
revoke
. FreeBSD 시스템 호출 매뉴얼. 2016년 1월 25일.vhangup
. 리눅스 프로그래머 매뉴얼. 데비안 매뉴얼 페이지. 2016년 3월 15일.- Daniel J. Bernstein이 Unix의 TTY에 대해 이야기합니다.. 자주 주어지는 답변입니다.
- 조나단 드 보인 폴라드. 사용자 공간 가상 터미널. 스낵 가이드. 소프트웨어.