所以我一直在试图弄清楚这一点,我有点卡住了。
我使用Python的子进程模块和Popen打开PuTTY会话(使用plink.exe),并连接到远程主机。这意味着我可以访问会话输出。
我试图找到一个命令,或者写一个我可以执行的脚本,它会告诉我处理会话的远程sshd进程的PID。如果只有一个SSH会话,我可以使用 " ps -f | grep sshd"列出sshd进程,并从解析该行中找到PID。
问题是,同时有多个SSH连接到此主机,因此有多个sshd实例正在运行。有没有人知道通过从同一个会话运行命令来确定运行特定会话的进程的方法?
注意: 以下脚本适用于OS X和许多形式的Linux。
#!/bin/sh
TTY=$(tty)
TTYID=${TTY##*/}
ps -f | grep $TTYID
这将返回具有正确PID的行,然后可以使用Python对其进行解析。 不幸的是,我使用的是QNX,它没有在" ps"中实现TTY字段,因此该字段中的所有内容都只显示了一个'?'。还有其他想法吗?
谢谢!
答案 0 :(得分:7)
正在运行的shell的完整格式打印pid,并打印第三个字段,即PPID(父pid)。
ps --no-headers -fp $$ | awk '{print $3}'