관련 통역사의 프로세스를 gdb에 첨부하면 가능하다고 생각합니다. 이 펄 원 라이너로 시도했습니다
perl -e 'do { print "x\n"; sleep(1) } while(1)'
불행히도 비슷한 bash 스크립트로는 작동하지 않습니다.
먼저 출력을 캡처하려는 프로세스의 PID를 파악해야합니다. 그런 다음 gdb
다른 터미널에서 시작 하여 다음 gdb 명령을 실행하십시오.
attach PID
call close(2)
call open("/abs/olu/te/path/filename", 65, 384)
detach PID
그 후에 기록 된 전체 데이터 stderr
가로 리디렉션됩니다 /abs/olu/te/path/filename
.
attach PID
프로세스를 gdb에 첨부하고 중지
call close(2)
stderr
프로세스 의 파일 디스크립터를 닫습니다 (파일 stdout
디스크립터가 1 인 경우).
call open(...)
새 파일을 열고 새로 작성된 파일 설명자에 대해 사용되지 않은 최저 정수를 취합니다.
detach PID
프로세스를 계속
적어도 내 컴퓨터에서는 처음 두 줄은 POSIX와 호환되지만 세 번째 줄은 아닙니다.
open
세 번째 줄 의 두 번째 및 세 번째 인수는 에 설명되어 man 2 open
있습니다. 필자의 경우 65 open
는 파일을 만들고 쓰기 전용 파일을 열어야 함을 의미합니다 O_WRONLY | O_CREAT
( 즉 ,에 정의 됨 fcntl.h
). 세 번째 인수는 open에 사용자에게 읽기 및 쓰기 권한이있는 파일을 작성하도록 지시합니다 S_IWUSR | S_IRUSR
(에 정의 됨 sys/stat.h
). 따라서 컴퓨터에서 적절한 값을 스스로 찾아야 할 수도 있습니다.