To pytanie zostało poruszone kilka razy, nie tylko tutaj, ale także w innych witrynach sieci wymiany stosów (np. Jak zrobić ssh, aby zabijał zdalny proces, gdy przerywam sam ssh? ). Nie mogę jednak sprawić, by którekolwiek z tych rozwiązań działało dla mnie.
Uruchamiam polecenie przez ssh. Ilekroć wychodzę z ssh, chcę, aby polecenie również zginęło. To polecenie to demon o nazwie ktserver, który działa bez końca, dopóki nie naciśniesz Ctrl-C.
Uruchamiam to w następujący sposób: ssh -t compute-0-1 ktserveri rzeczywiście, kiedy naciskam Ctrl-C, proces kończy się z wdziękiem i kończy się sesja ssh.
Jeśli jednak zamiast naciskać Ctrl-C, zabijam proces ssh za pomocą killpolecenia (na przykład wysyłając SIGINT lub SIGHUP), ktserverproces pozostaje aktywny.
Jak sprawić, by ktserverzawsze umierali niezależnie od tego, jak sshzostanie zabity?
EDYCJA : Jeśli zamiast ktserveruruchomić coś zupełnie innego, na przykład geditwszystko działa jak urok (tzn. Gedit umiera, gdy połączenie się kończy). Dlatego może być coś nie tak z samym procesem. Na przykład myślałem, że może to ignorować SIGHUP lub SIGINT. Jednak po uruchomieniu kill -1 ktserverlub kill -2 ktserverproces umiera zgodnie z oczekiwaniami.
EDYCJA 2 : Jak zauważa Mark Plotnick, problem związany jest z faktem, że na kanale ssh nie ma komunikacji. Potwierdziłem, uruchamiając ssh -t <host> readi zabijając później proces ssh. readwciąż żył i kopał.
ssh example.com dd ...pracy biec do końca, nawet po godzinach sshmatryc połączeń ze względu na problemy z siecią. Jeśli możesz zmienić ktserveropcję, aby od czasu do czasu wypisać coś, może to być obejście problemu.
readna komputerze zdalnym i po zabiciu połączenia ssh readnie umarłem. Niestety nie mogę zmienić ktserver na cokolwiek wyjściowego. Nie ma więc rozwiązania?
shopt -s huponexit). Czy możesz sprawdzić, czy to działa dla Ciebie?
kill -9 ktserver?