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 ktserver
i 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ą kill
polecenia (na przykład wysyłając SIGINT lub SIGHUP), ktserver
proces pozostaje aktywny.
Jak sprawić, by ktserver
zawsze umierali niezależnie od tego, jak ssh
zostanie zabity?
EDYCJA : Jeśli zamiast ktserver
uruchomić coś zupełnie innego, na przykład gedit
wszystko 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 ktserver
lub kill -2 ktserver
proces 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> read
i zabijając później proces ssh. read
wciąż żył i kopał.
ssh example.com dd ...
pracy biec do końca, nawet po godzinach ssh
matryc połączeń ze względu na problemy z siecią. Jeśli możesz zmienić ktserver
opcję, aby od czasu do czasu wypisać coś, może to być obejście problemu.
read
na komputerze zdalnym i po zabiciu połączenia ssh read
nie 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
?