![백그라운드에서 프로세스를 실행하고 해당 pid를 가져와 로그 파일 이름을 만드는 방법](https://linux55.com/image/108333/%EB%B0%B1%EA%B7%B8%EB%9D%BC%EC%9A%B4%EB%93%9C%EC%97%90%EC%84%9C%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EB%A5%BC%20%EC%8B%A4%ED%96%89%ED%95%98%EA%B3%A0%20%ED%95%B4%EB%8B%B9%20pid%EB%A5%BC%20%EA%B0%80%EC%A0%B8%EC%99%80%20%EB%A1%9C%EA%B7%B8%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EB%A7%8C%EB%93%9C%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
내가 할 때
node process.js 1>$LOGFOLDER\\$$.log
생성된 프로세스가 PID
파일명이 됩니다. 동일한 process.js
. 그래서 &
마지막에 이렇게 덧붙였습니다.
node process.js 1>$LOGFOLDER\\$$.log &
이로 인해 프로세스는 백그라운드에서 실행되지만 PID
(파일 이름)은 항상 잘못되었습니다. $!
위 줄 다음에 로그 프로세스 ID를 사용 했습니다 . 첫 번째 경우에는 $!
출력 파일과 로그 파일의 이름이 동일합니다. 그러나 두 번째 경우에는 그렇지 않습니다. 자리 표시자를 사용하여 프로세스를 백그라운드에서 실행하는 것은 &
다릅니다. 왜 이런 일이 발생하며 어떻게 하면 두 가지를 모두 작동하게 할 수 있나요?PID
$$
답변1
이는 백그라운드 프로세스가 서브셸에서 실행되기 때문입니다. 원하는 작업을 수행하려면 다음을 수행할 수 있습니다.
LOGFOLDER="$LOGFOLDER" bash -c 'node process.js 1>$LOGFOLDER.$$.log' &