셸에서 백그라운드에서 프로세스를 실행할 때 "[작업 번호] [PID]"를 파일로 리디렉션하려면 어떻게 해야 합니까?

셸에서 백그라운드에서 프로세스를 실행할 때 "[작업 번호] [PID]"를 파일로 리디렉션하려면 어떻게 해야 합니까?

이 명령의 출력을 리디렉션하고 싶습니다 firefox &. 추가한다는 &것은 백그라운드에서 명령을 실행하고 이를 사용할 때 수신된다는 것을 알고 있습니다 [number of process in background] [PID].

firefox & > firefoxFile 

그런데 열어 firefoxFile보니 텅 비어 있었습니다. 못 찾겠 어 [number of process in forground] [PID].

답변1

당신이 쓴 댓글에

백그라운드 프로세스의 pid와 수를 찾고 싶습니다.

이건 어때?

firefox &
pid=$!

echo "The PID for the background process is $pid" >&2

PID가 있으면 물론 원하는 파일에 그 값을 쓸 수 있습니다.

답변2

쉘이 bash[1]인 경우 다음을 시도해 볼 수 있습니다.

exec 3>&2 2>firefoxFile; firefox & exec 2>&3-

여기에서 쉘(예: bash)이 [jobnum] pid백그라운드 작업 알림을 인쇄합니다.표준 에러, Firefox가 아닙니다. 이 조합은 일시적으로 stderr을 파일로 리디렉션 firefoxFile하고 해당 파일에 알림을 캡처합니다.그리고Firefox는 수명 동안 stderr에 무엇이든 기록합니다.

[jobnum] Done firefox백그라운드 작업이 종료되면 인쇄될 bash를 캡처하지 않습니다.


귀하의 명령은 firefox & > file두 개의 명령으로 구문 분석됩니다1. firefox &( firefox백그라운드에서 실행됩니다) 그리고2. > file(아무것도 쓰지 않고 잘립니다 file.) 이것은 확실히 당신이 원하는 것이 아닙니다.

[1]읽을 수 있습니다여기이 트릭이 다른 쉘에서는 작동하지 않는 이유는 stderr이 에서 리디렉션될 수 있지만 zsh해당 zsh프롬프트와 작업 알림은 stderr에 기록되지 않고 이 목적을 위해 특별히 열린 현재 터미널을 가리키는 다른 fd에 기록되기 때문입니다.

답변3

정확하지는 않지만 거의 비슷합니다. 조금 더 추가하면 됩니다 sed.

firefox &
jobs -l | grep -E "\[[0-9]+\]\+" > firefoxFile

관련 정보