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 ktserverve 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, killkomutu kullanarak (örneğin, SIGINT veya SIGHUP göndermek) ssh işlemini öldürürsem , ktserversüreç canlı kalır.
Nasıl yapabilir ktservernasıl hep kalıp bağımsız sshöldürüldü?
EDIT : Eğer, ktservertamamen 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 ktserverveya 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> readsonra ssh işlemini çalıştırarak ve öldürerek onayladım . readhala hayatta ve tekmeliyordu.
ssh example.com dd ...sonra tamamlanması bile saate çalıştırmak işleri sshnedeni ağ sorunları bağlantı ölür. Bir ktserversüre içinde bir şey çıktısı alma seçeneğini değiştirebilirseniz , bu bir geçici çözüm olabilir.
readuzak 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 ktservermi