답변:
프로세스가 5 초마다 실행 중인지 확인하고 적절한 조치를 수행하는 다음과 같은 작업을 수행 할 수 있습니다.
while true; do
if ps -ef | grep -q '[l]ong-running-process'; then
sleep 5
else
sudo poweroff
fi
done
grep표현식 에서 대괄호를 주목하십시오 . 이는 grep프로세스가 ps목록 에있는 경우 프로세스가 일치하지 않도록 하기위한 것입니다 . 대괄호로 단일 문자를 둘러싸는 것으로 충분합니다.
나는 항상 이것을한다.
&&명령을 잊어 버렸다는 것을 깨달으십시오 .fg && shutdown -h now:
또는 다음과 같은 다른 답변에서 제안한대로 투표 할 수 있습니다.
while ps -p $PID ; do sleep 5 ; done ; shutdown -h now
pid를 알고 있다면 다음을 실행할 수 있습니다.
while ps -p $PID; sleep 5; done; shutdown -h now
ps에서 echo없이 실행하려면 다음을 수행하십시오.
while ps -p $PID >/dev/null; sleep 5; done; shutdown -h now
마지막으로 출력없이 백그라운드에서 실행하십시오.
(while ps -p $PID >/dev/null; sleep 5; done; shutdown -h now ) &
Scott의 솔루션은 좋은 솔루션이지만 grep이미 pid를 알고 있다면 반복 해서 할 필요가 없습니다 . 그리고 입력하는 것이 훨씬 빠릅니다. : p
&&이전 명령이 성공한 경우에만 후속 작업이 실행 된다는 것을 알고 싶습니다 . 명령이 실패하더라도 실행하려면;대신 사용하십시오.