Paramiko и exec_command - уничтожение удаленного процесса?

Я использую Paramiko для tail -f файла на удаленном сервере.

Раньше мы запускали это через ssh -t , но это оказалось ненадежным, и -t вызывал проблемы с нашей системой удаленного планирования.

У меня вопрос, как убить tail, когда скрипт улавливает SIGINT?

Мой скрипт (на основе Длительные команды ssh в модуле python paramiko (и как их завершить) )

#!/usr/bin/env python2
import paramiko
import select

client = paramiko.SSHClient()
client.load_system_host_keys()
client.connect('someserver', username='victorhooi', password='blahblah')
transport = client.get_transport()
channel = transport.open_session()

channel.exec_command("tail -f /home/victorhooi/macbeth.txt")
while True:
    try:
        rl, wl, xl = select.select([channel],[],[],0.0)
        if len(rl) > 0:
            # Must be stdout
            print channel.recv(1024)
    except KeyboardInterrupt:
        print("Caught control-C")
        client.close()
        channel.close()
        exit(0)

Сценарий успешно ловит мой Ctrl-C и завершается. Однако он оставляет процесс tail -f запущенным в удаленной системе.

Ни client.close (), ни channel.close (), похоже, не прерывают его.

Какую команду я могу ввести в блоке except, чтобы его убить?

На удаленном сервере работает Solaris 10.

13
задан Community 23 May 2017 в 10:31
поделиться