これは、ここだけでなく、スタック交換ネットワークの他のサイトでも何度か取り上げられた質問です(たとえば、sshを中断したときにリモートプロセスを強制終了するためにsshを作成する方法は? )。しかし、私はどのソリューションも私のために機能させることはできません。
sshを介してコマンドを実行しています。sshを終了するたびに、コマンドも停止するようにします。このコマンドはktserverと呼ばれるデーモンであり、Ctrl-Cを押すまで無期限に実行されます。
次のように実行します。ssh -t compute-0-1 ktserver実際、Ctrl-Cを押すと、プロセスは正常に終了し、sshセッションが終了します。
ただし、Ctrl-Cを押す代わりに、killコマンドを使用して(たとえば、SIGINTまたはSIGHUPを送信して)sshプロセスを強制終了すると、ktserverプロセスは存続します。
どうすれば殺さktserverれる方法に依存せずに常に死ぬことができsshますか?
編集:のktserverような完全に異なる何かを実行する代わりにgedit、すべてが魅力のように機能する場合(つまり、geditが接続が切れたときに死ぬ)。したがって、プロセス自体に何か問題がある可能性があります。たとえば、SIGHUPまたはSIGINTを無視しているのではないかと考えました。ただし、kill -1 ktserverまたはを実行するkill -2 ktserverと、プロセスは期待どおりに終了します。
EDIT2:Mark Plotnickが指摘しているように、この問題は、sshチャネルで循環している通信がないという事実に関連しています。ssh -t <host> readその後、sshプロセスを実行して終了することで確認しました。readまだ生きていて蹴っていました。
ssh example.com dd ...数時間経っても、ジョブが完了するまで実行されましたssh。ktserver時々何かを出力するオプションをとるように変更できる場合、それは回避策かもしれません。
readに、リモートコンピューターで実行しようとしましたが、ssh接続を切断した後、read死ぬことはありませんでした。残念ながら、ktserverを変更して何も出力することはできません。それでは解決策はありませんか?
shopt -s huponexit)。これがあなたのために働くかどうかテストできますか?
kill -9 ktserverか?