これは、ここだけでなく、スタック交換ネットワークの他のサイトでも何度か取り上げられた質問です(たとえば、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
か?