2016-11-23 11 views
0

リモートマシン上でプロセスを実行したいのですが、ホストプログラムが終了したときにプロセスを終了したいと思っています。paramiko:リモートで開始されたプロセスを自動的に終了する

私はこのようになり、小さなテストスクリプトがあります。

ssh = paramiko.SSHClient() 
ssh.load_system_host_keys() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect('my_machine', username='root', key_filename='some_key') 
_in, _out, _err = ssh.exec_command('python /home/me/loop.py') 
time.sleep(5) # could do something with in/out/err 
ssh.close() 
paramiko

インポート:

import time 
while True: 
    print('hello') 
    time.sleep(1) 

を、私はこの1つのようなスクリプトを経由してリモートマシン上でこのプロセスを開始

しかし、私の問題は、SSH接続を開始したPythonプロセスを閉じた後でも、開始されたプロセスが実行し続けることです。

ホストプロセスが終了したときにリモートセッションとリモートで開始されたプロセスを強制的に閉じる方法はありますか?

編集

This questionは似て聞こえるが、何の満足の行く答えはありません。私はkeepaliveを設定しようとしたが効果なしで:

ssh.get_transport().set_keepalive(1) 

答えて

1

は、SSH接続が閉じられるとき、それは、リモートホスト上で実行中のコマンドを殺さないでしょう。

最も簡単な解決策がある:

ssh.exec_command('python /home/me/loop.py', get_pty=True) 
# ... do something ... 
ssh.close() 

SSH接続が閉じられたときに、(リモート・ホスト上の)PTYも閉鎖され、(リモート・ホスト上の)カーネルにSIGHUP信号を送信しますリモートコマンド。デフォルトでは、SIGHUPはプロセスを終了し、リモートコマンドが強制終了されます。

SIGHUP切断が端末によって検出された場合制御端末と 関連に制御処理(セッションリーダー)に送られる。APUEブックによれば


インターフェイス。

0

お試しくださいcloser - 私はこの種のもののために特別に書いたライブラリです。 Paramikoを使用しませんが、おそらくそれはあなたのためにとにかく動作します。

関連する問題