W obecnej sytuacji pewien skrypt „wywoływany.sh” uruchamia w tle inny skrypt „wywoływany.sh”, wykonuje inne operacje, śpi przez chwilę, a następnie kończy „wywoływany.sh” za pomocą pkill called.sh
. To działa dobrze.
Następnie chciałbym również uruchomić skrypt „wywoływany.sh” z innych terminali jako samodzielny skrypt w dowolnym momencie, zarówno przed uruchomieniem wywołania wywołanego. Te niezależne instancje nie powinny być zabijane przez „call.sh”.
Jak mogę to osiągnąć? Intuicja mówi, że skrypt wywołujący powinien być w stanie poinformować proces, który rozpoczął, na podstawie innych uruchomionych w międzyczasie nazw.
W wariancie „call.sh” może również uruchomić „call”, który jest dowiązaniem symbolicznym do „wywoływany.sh”. Czy to komplikuje zarządzanie powyższą sytuacją? Jakie szczególne przestrogi i dostosowania wymaga użycie dowiązania symbolicznego?
Odpowiedzi:
Nie używaj nazwy, aby ją zabić. Ponieważ
calling.sh
skrypt wywołuje proces, który później chcesz zabić, po prostu użyj$!
(zman bash
):Więc jeśli jesteś
calling.sh
taki:Zmień to na:
źródło
$calledPid
nadrzędny PID to PIDcalled.sh
.Tyle razy musiałem wybierać to, ale ze skryptów; jest jeszcze bardziej zabawne, gdy skrypty są wywoływane w ramach złożonego automatycznego harmonogramu. Naprawdę nie powinieneś polegać na czymś takim jak
pkill
wybór skryptu do zabicia.W calling.sh powinieneś zapisać PID zadań, które rozpoczniesz i zabić je jawnie przez PID.
Połączenia wewnętrzne. Sh:
źródło