Bu, yalnızca burada değil, aynı zamanda yığın değişim ağının diğer sitelerinde de birkaç kez ele alınan bir sorudur (örneğin , ssh'ın kendisini kestiğimde uzak işlemi öldürmek için ssh nasıl yapılır? ). Ancak, çözümlerin hiçbirinin benim için çalışmasını sağlayamıyorum.
Ssh ile bir komut çalıştırıyorum. Her ssh'den çıktığımda, komutun da ölmesini istiyorum. Bu komut, Ctrl-C tuşlarına basana kadar süresiz çalışan ktserver adında bir servistir.
Aşağıdaki gibi çalıştırıyorum: ssh -t compute-0-1 ktserver
ve gerçekten de, Ctrl-C'ye bastığımda, işlem incelikle biter ve ssh oturumu sona erer.
Bununla birlikte, eğer Ctrl-C'ye basmak yerine, kill
komutu kullanarak (örneğin, SIGINT veya SIGHUP göndermek) ssh işlemini öldürürsem , ktserver
süreç canlı kalır.
Nasıl yapabilir ktserver
nasıl hep kalıp bağımsız ssh
öldürüldü?
EDIT : Eğer, ktserver
tamamen farklı bir şeyi çalıştırmak yerine gedit
, her şey bir cazibe gibi çalışırsa (yani, bağlantı öldüğünde gedit ölür). Bu nedenle, işlemin kendisinde bir sorun olabilir. Örneğin, SIGHUP veya SIGINT'i görmezden gelebileceğini düşündüm. Bununla birlikte, koştuğumda kill -1 ktserver
veya kill -2 ktserver
çalıştığımda işlem beklendiği gibi ölüyor.
EDIT2 : Mark Plotnick'in işaret ettiği gibi, mesele, ssh kanalında dolaşan hiçbir iletişim olmadığı gerçeğiyle ilgilidir. Daha ssh -t <host> read
sonra ssh işlemini çalıştırarak ve öldürerek onayladım . read
hala hayatta ve tekmeliyordu.
ssh example.com dd ...
sonra tamamlanması bile saate çalıştırmak işleri ssh
nedeni ağ sorunları bağlantı ölür. Bir ktserver
süre içinde bir şey çıktısı alma seçeneğini değiştirebilirseniz , bu bir geçici çözüm olabilir.
read
uzak bilgisayarda koşmayı denedim ve ssh bağlantısını öldürdükten sonra read
ölmedi. Ne yazık ki, ktserver herhangi bir şey çıktısını değiştiremezsiniz. Öyleyse çözüm yok mu?
shopt -s huponexit
). Bunun senin için işe yarayıp yaramadığını test edebilir misin?
kill -9 ktserver
mi