백그라운드 작업의 stdout/stderr을 콘솔에서 로그 파일로 리디렉션하시겠습니까?

백그라운드 작업의 stdout/stderr을 콘솔에서 로그 파일로 리디렉션하시겠습니까?

나는 단지 작업을 실행합니다(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에 대한 호출에서 반환된 파일 설명자를 복제합니다.open1stdout
  • 두 번째 호출은 dup2파일 설명자를 ( ) 1에 복제합니다.2stderr

관련 정보