특정 조건에서 - 특히 특정 파일을 만든 후 Cygwin bash 스크립트를보고 종료해야합니다. 그러나 Ctrl + C와 같은 수준의 완성도로 스크립트를 정확히 종료하는 방법을 파악하는 데 어려움을 겪고 있습니다.bash 스크립트에서 Cygwin bash에서 스크립트의 프로세스 트리를 종료하는 방법
다음은 종료 될 때까지 기다리지 않는 간단한 스크립트 (test1
)입니다.
#!/bin/bash
test -f kill_me && rm kill_me
touch kill_me
tail -f kill_me
이 스크립트가 포 그라운드에서 실행되는 경우, Ctrl + C가 종료됩니다 모두 tail
하고 스크립트 자체. 스크립트가 백그라운드에서 실행되는 경우 kill %1
(작업 1이라고 가정)은 tail
과 스크립트를 모두 종료합니다.
그러나 스크립트에서 똑같은 작업을 시도하면 이 부모로부터 연결이 끊어진 상태에서 중단되는 동안 스크립트를 실행하는 bash
프로세스 만 종료됩니다. 여기에 내가 시도 한 가지 방법 (test2
)의 :이 실행되면
#!/bin/bash
test -f kill_me && rm kill_me
(
touch kill_me
tail -f kill_me
) &
while true; do
sleep 1
test -f kill_me && {
kill %1
exit
}
done
, bash는 백그라운드에서 실행 서브 쉘 확인을 종료하지만, tail
은 여전히 주위에 달려 있습니다.
내가 명시 적으로 별도의 스크립트를 사용하는 경우, 다음과 같이 여전히 (test3
) 작동하지 않습니다이 스크립트가 실행 된 후
#!/bin/bash
test -f kill_me && rm kill_me
# assuming test1 above is included in the same directory
./test1 &
while true; do
sleep 1
test -f kill_me && {
kill %1
exit
}
done
tail
내 실제 사례에서 파일을 만드는 프로세스는 특별히 쓸모가 없으므로 자체적으로 종료 할 수 없습니다. 특정 파일을 만든시기를 알아내어 그 시점에서 끝낼 수 있음을 알 수 있습니다. 불행히도, 여러 개의 인스턴스가 실행될 수 있으므로 간단하게 killall
또는 이와 동등한 것을 사용할 수 없으며 특정 인스턴스 만 죽이고 싶습니다.
감사합니다. 그것은 Cygwin kill 맨 페이지에 문서화되어 있지 않은 것은 이상한 일입니다. 그러나 Cygwin 버전의 kill으로 작동합니다. –