백그라운드에서 프로세스를 실행하고 해당 pid를 가져와 로그 파일 이름을 만드는 방법

백그라운드에서 프로세스를 실행하고 해당 pid를 가져와 로그 파일 이름을 만드는 방법

내가 할 때

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' &

관련 정보