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


9

방금 작업을 실행합니다 (foo.sh로 가정).

./foo.sh
[Press Ctrl-Z to stop]
bg  # enter background

그리고 stdout 및 stderr에 출력을 생성합니다. stdout으로 바꾸고 stderr을 현재 화면 대신 다른 파일로 리디렉션하는 방법이 있습니까?


FG로 가져 와서 출력을 리디렉션하고 BG로 다시 보냅니다.
alfasin

답변:


16

분명히 나는 ​​당신의 질문을 처음으로 잘못 읽었으므로 업데이트 된 답변은 다음과 같습니다.

프로그램을 백그라운드로 보낸 후에는 먼저 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파일 디스크립터를 복제 12(인 stderr)

1
-1. 묻는 질문에 대답하지 않습니다. 특히 백그라운드 작업 에서 출력을 리디렉션하는 방법 입니다.
Steven 월요일

1
예, 죄송합니다. 질문을 잘못
읽고

시원한! 공감 철회.
Steven
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.