나는 단지 작업을 실행합니다(foo.sh를 가정).
./foo.sh
[Press Ctrl-Z to stop]
bg # enter background
그리고 stdout 및 stderr로 출력을 생성합니다. 현재 화면 대신 stdout 및 stderr을 다른 파일로 리디렉션하는 방법이 있습니까?
답변1
분명히 처음에 귀하의 질문을 잘못 읽었으므로 업데이트된 답변은 다음과 같습니다.
프로그램을 백그라운드로 보낸 후 먼저 PID를 찾아야 합니다.
pgrep foo.sh
gdb
그런 다음 해당 프로세스에 연결하는 데 사용할 수 있습니다.
gdb -p <PID>
gdb
그런 다음 이 프로그램이 쓰는 위치를 변경하십시오 .
p dup2(open("/path/to/file",577, 420), 1)
p dup2(1, 2)
그런 다음 프로세스에서 분리하고 종료합니다.gdb
detach
quit
약간의 설명
577
는 다음과 같습니다O_CREAT|O_WRONLY|O_TRUNC
420
는 다음과 같습니다S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH
open
따라서 파일을 열고 파일이 있으면 0바이트로 자르고 파일이 없으면 올바른 파일 권한을 사용하여 새 파일을 생성하는 호출입니다.- 에 대한 첫 번째 호출은 파일 설명자 (즉 )
dup2
에 대한 호출에서 반환된 파일 설명자를 복제합니다.open
1
stdout
- 두 번째 호출은
dup2
파일 설명자를 ( )1
에 복제합니다.2
stderr