我找不到一个简单的答案:我正在使用paramiko登录并远程执行多个进程,我需要每个进程的PID,以便以后检查它们。在paramiko中似乎没有函数来获取已执行命令的PID,所以我尝试使用以下内容:
stdin,stdout,stderr = ssh.exec_command('./someScript.sh &;echo $!;)
我认为然后通过stdout解析将返回PID,但事实并非如此。我假设我应该在后台运行脚本以获得PID(当它运行时)。有没有更简单明了的获取PID的方法?
答案 0 :(得分:10)
以下是获取远程进程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
答案 1 :(得分:0)
我通常使用标准UNIX命令pidof <command name>
,稍后我会检查该过程。 AFAIK没有简单的方法。
好的,鉴于您的评论,您可以通过将./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')
并阅读输出