получить PID от paramiko

Я не могу найти простой ответ на этот вопрос: я использую paramiko для входа и выполнения ряда процессов удаленно, и мне нужны PIDs каждого процесса, чтобы проверить их позже. Кажется, в paramiko нет функции для получения PID выполняемой команды, поэтому я попытался использовать следующее:

stdin,stdout,stderr = ssh.exec_command('./someScript.sh &;echo $!;)

Я думал, что затем разбор через stdout вернет PID, но это не так. Я предполагаю, что я должен запустить сценарий в фоновом режиме, чтобы иметь PID (пока он работает). Есть ли более простой, очевидный способ получить PID?

2 ответов


вот способ получить ID удаленного процесса:

def execute(channel, command):
    command = 'echo $$; exec ' + command
    stdin, stdout, stderr = channel.exec_command(command)
    pid = int(stdout.readline())
    return pid, stdin, stdout, stderr

Я обычно использую стандартную команду UNIX pidof <command name>, когда я проверю работу позже. AFAIK нет более простого способа.

OK, учитывая ваш комментарий, вы можете решить его, обернув свой. /someScript.sh в процессе Python, который использует модуль подпроцесса.

wrapper.py:

import subprocess
import sys
proc = subprocess.Popen(sys.argv[1])
print proc.pid
proc.wait() #probably
выполнить
stdin,stdout,stderr = ssh.exec_command('./wrapper.py ./someScript.sh')

и прочитайте вывод