如何通过SSH在cmd/PowerShell中获取运行中命令的PID
操作实现方案
1. 本地执行命令同时获取当前进程PID
对应你要实现的类似echo $$; python my_script.py > out.log的功能,不同终端环境的写法如下:
- Linux Shell
直接使用内置变量$$获取当前Shell进程PID,写法和你示例一致:echo $$; python my_script.py > out.log - Windows CMD
CMD无内置PID变量,可调用PowerShell接口获取,单条命令写法如下:
如果写在.bat批处理脚本中,需要把命令中的for /f %i in ('powershell -Command "$pid"') do @set CURR_PID=%i & echo %CURR_PID% & python my_script.py > out.log%i改为%%i - PowerShell
直接使用内置变量$PID获取当前会话进程PID:$PID python my_script.py > out.log
2. 通过SSH查询远程正在运行命令对应的PID
首先需要确保目标主机已开启SSH服务,你可以直接通过SSH执行远程查询命令,无需手动登录后操作:
- 远程主机为Linux系统
可以用pgrep或者ps过滤进程,示例查询命令行包含python my_script.py的进程PID:
输出结果就是对应进程的PID,多个匹配结果会分行输出。# 写法1:使用pgrep(更简洁) ssh 你的用户名@目标主机地址 "pgrep -f 'python my_script.py'" # 写法2:使用ps+grep过滤 ssh 你的用户名@目标主机地址 "ps aux | grep '[p]ython my_script.py' | awk '{print \$2}'" - 远程主机为Windows系统
调用PowerShell的进程查询接口过滤:ssh 你的用户名@目标主机地址 "powershell -Command \"Get-Process | Where-Object {\$_.CommandLine -like '*python my_script.py*'} | Select-Object -ExpandProperty Id\""
内容的提问来源于stack exchange,提问作者SR Giri
相关产品推荐
相关产品推荐

