Bash 스크립트에서 수동으로 PID 파일 작성


10

장기 실행 프로그램을 실행하고 프로그램 프로세스 ID를 별도의 파일에 저장하는 Bash 스크립트를 작성하려면 어떻게해야합니까?

나는 같은 것을 원한다

#!/bin/bash
exec long_running_tool
echo `ps af |grep "long_running_tool" |awk '$5 == "long_running_tool" {print $1}'` > pid_file

그러나 정확하게 이렇게하면 ps애프터 이 완료된 후에 실행 됩니다.

프로세스의 프로세스 ID를 얻는 방법이 있습니까?


2
exec가 포크되지 않기 때문에 샘플 코드가 작동하지 않으므로 쉘 프로세스가 프로세스로 대체됩니다 long_running_tool. 결과적으로 exec는 절대 리턴되지 않으며 다음 행에 도달하지 않습니다. 참조 help exec, execve(2).
Etienne Dechamps

@ e-t172 지적 해 주셔서 감사합니다. 그런 다음 'exec'를 삭제하십시오.
DerMike

답변:


12

"&"를 사용하여 백그라운드에서 프로세스를 쉽게 실행 한 다음 "$!"를 사용하여 백그라운드 프로세스의 PID를 얻을 수 있습니다.

#!/bin/bash
long_running_tool &
echo $! > pid_file

그런 다음 선택적으로 $! 프로세스가 실행을 완료 할 때까지 쉘을 차단하려는 경우


1
업데이트 : fg를 사용할 때 'fg : 21 : job (null) job job에서 작성되지 않음'이 표시되고 스크립트가 차단되지 않습니다. 죄송합니다.
DerMike

"$를 기다려라!" 실제로 fg와 비슷한 효과가 있어야 스크립트에서 작업 할 수 있습니다. 게시하기 전에 확인했을 것입니다. >.> 내 나쁜.
Jeremy Sturdivant

9
#!/bin/bash
echo $$ > fooapp.pid
exec fooapp

앞에서 언급했듯이 PID를 유지하면서 지정된 프로그램으로 exec 대체합니다 .bash

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