가변적인 시간(2분 이내) 동안 실행되는 프로그램이 있는데, 덜 짜증나게 하기 위해 행운의 메시지를 추가했습니다.
#!/bin/bash
...
for i in $(seq 1 45); do sleep 3; echo; echo; fortune; done &
...
그러나 프로그램 지속 시간은 (여기서 관련되지 않은 요인에 따라) 달라질 수 있으며 중지 메시지가 필요합니다.
#!/bin/bash
...
for i in $(seq 1 45); do sleep 3; echo; echo; fortune; done &
...
if [any-condition]; Then
#script is over... Stop messages!!!
fi
...
if [any-condition]; Then
#Stop messages... script continue execution
fi
... Blah blah
...
#script is over stop Messages!
그래서 3초에 45개의 메시지를 준비하면 프로그램은 빨리 종료될 수 있지만 단말기에는 여전히 메시지가 나타나 다른 작업을 방해하게 됩니다.
명령을 사용해 보았지만 jobs
백그라운드에 작업이 없습니다. 명령을 사용해 보았지만 ps
메시지 작업을 찾을 수 없습니다.
이 행운의 메시지를 어떻게 막을 수 있나요?
답변1
가장 쉬운 방법은 를 사용하는 것입니다 $!
. 이것은 백그라운드에서 시작된 마지막 프로세스의 PID입니다 man bash
.
!
비동기 명령으로 실행되거나 bg 내장 명령을 사용하여 가장 최근에 백그라운드에 추가된 작업의 프로세스 ID로 확장됩니다.
따라서 다음과 같이 할 수 있습니다.
for i in $(seq 1 45); do sleep 3; echo; echo; fortune; done &
pid=$!
[ main script here]
if [any-condition]; then
kill $pid
fi
그러나 나는 이것이 일을 하는 다소 복잡한 방법이라고 생각하지 않을 수 없습니다. 전체 스크립트를 보여주면 좀 더 구체적인 예를 제시할 수 있지만 다음과 같은 것은 왜 안 됩니까?
long_process &
while ps -p $! >/dev/null; do sleep 3; echo; echo; fortune; done
이렇게 하면 시간이 오래 걸리고 fortune
끝날 때까지 실행되는 모든 프로세스를 시작할 수 있습니다.