현재의 경우 특정 스크립트 "calling.sh"는 백그라운드에서 다른 스크립트 "calling.sh"를 시작하고 다른 작업을 수행하고 잠시 잠자기 상태가 된 다음 pkill called.sh
... 이것은 훌륭하게 작동합니다.
그런 다음 다른 터미널에서도 "called.sh"를 실행하고 싶습니다.독립형 스크립트로Calling.sh를 시작하기 전이나 후에 언제든지 가능합니다. 이러한 독립적인 인스턴스해서는 안 된다"calling.sh"에 의해 종료되었습니다.
이 목표를 어떻게 달성할 수 있나요? 직관에 따르면 호출 스크립트는 자신이 시작하는 프로세스와 동시에 실행되는 동일한 이름의 다른 프로세스를 구별할 수 있어야 합니다.
변형으로 "calling.sh"는 "calling"을 시작할 수도 있습니다.심볼릭 링크"call.sh"로. 위의 상황을 관리하는 것이 복잡합니까? 심볼릭 링크를 사용하려면 어떤 구체적인 고려 사항과 조정이 필요합니까?
답변1
이 이름으로 죽이지 마세요. calling.sh
스크립트가 나중에 종료하려는 프로세스를 호출하고 있으므로 $!
(from man bash
)을 사용하세요.
!
bg
비동기 명령으로 실행되거나 내장된 명령을 사용하여 가장 최근에 백그라운드에 추가된 작업의 프로세스 ID로 확장됩니다.
그래서 당신 calling.sh
이 다음과 같다면 :
called.sh &
## do stuff
pkill called.sh
다음과 같이 변경하세요.
called.sh &
calledPid=$!
# do stuff
kill "$calledPid"
답변2
저는 이것을 스크립트에서 여러 번 선택해야 했습니다. 스크립트가 복잡한 자동화 계획의 일부로 호출될 때 훨씬 더 흥미로웠습니다. pkill
종료할 스크립트를 선택하는 것과 같은 사항 에 의존해서는 안 됩니다 .
Calling.sh 내에서 시작된 작업의 PID를 기록하고 PID로 명시적으로 종료해야 합니다.
Calling.sh 내부:
./called.sh &
called_pid=$!
# Later
kill $called_pid