현재 상황에서 특정 스크립트 ‘calling.sh’는 백그라운드에서 다른 스크립트 ‘called.sh’를 시작하고 다른 작업을 수행하고 잠시 동안 휴면 한 다음로 ‘called.sh’를 종료합니다 pkill called.sh
. 이것은 잘 작동합니다.
그런 다음 calling.sh를 시작 하기 전이나 후에 다른 시간에 다른 터미널에서 ‘called.sh’를 독립 실행 형 스크립트로 시작하고 싶습니다 . 이러한 독립 인스턴스 는 ‘calling.sh’에 의해 종료 되지 않아야 합니다.
어떻게하면 되나요? 직감에 따르면 호출하는 스크립트는 그 동안 실행중인 다른 이름에서 시작한 프로세스를 알 수 있어야합니다.
변형으로, ‘calling.sh’는 ‘called.sh’에 대한 심볼릭 링크 인 ‘called’를 시작할 수도 있습니다 . 위의 상황을 관리하는 것이 복잡합니까? 심볼릭 링크를 사용하려면 어떤 특정주의 사항과 조정이 필요합니까?
답변
이름을 사용하여 죽이지 마십시오. 때문에 calling.sh
스크립트가 나중에 죽이고 싶어 프로세스를 호출하고, 바로 사용 $!
(에서 man bash
)
!
비동기 명령으로 실행하든bg
내장 명령을 사용하든 백그라운드에 가장 최근에 배치 된 작업의 프로세스 ID로 확장
따라서 다음 calling.sh
과 같습니다.
called.sh &
## do stuff
pkill called.sh
이것을 다음과 같이 변경하십시오.
called.sh &
calledPid=$!
# do stuff
kill "$calledPid"
답변
나는 이것을 여러 번 선택해야했다. 복잡한 자동화 된 일정의 일부로 스크립트를 호출하면 훨씬 더 재미 있습니다. pkill
죽일 스크립트를 선택하는 것과 같은 것에 의존해서는 안됩니다 .
calling.sh 안에 시작한 작업의 PID를 기록하고 PID에 의해 명시 적으로 종료해야합니다.
내부 calling.sh :
./called.sh &
called_pid=$!
# Later
kill $called_pid