paramiko порождает нить для каждого .exec_command()
, поэтому вам не нужно добавлять обычную магию оболочки &
, как если бы вы были в bash. .exec_command()
вернется мгновенно, и вы должны позаботиться о том, чтобы прочитать его буферы (stdin, stdout, sterr)
client.exec_command('test > /dev/null 2 > &1')
time.sleep(5)
client.exec_command('killall -9 test')
...
# the remot command will be force killed if you close the channel. (may depend on sshd implementation)
Это запустит test
, перенаправляя stderr на стандартный вывод в отдельном потоке. Затем основной поток будет спать 5 секунд, и будет создан другой поток, который убивает тест, или, если вы не убьете его, вы просто закроете канал, а удаленный sshd позаботится обо всех процессах, созданных во время сеанса