![如何使用命令行参数找到进程的 PID?](https://linux22.com/image/1277325/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0%E6%89%BE%E5%88%B0%E8%BF%9B%E7%A8%8B%E7%9A%84%20PID%EF%BC%9F.png)
我使用的是 Mac OS X,这意味着我没有(例如)pgrep/pkill,但我想要类似的东西(我也不使用 macports/fink - homebrew 是我选择的 Unix 包工具 - 所以那些包不行)。
我想找到并终止具有特定参数的 ssh 实例 - 基本上是一个特定的远程 ssh 端口转发隧道。我使用的命令如下:
ps aux | grep ssh | grep remote-host | grep port-forwarding-stmt
但是,有时这个 grep 命令实际上会出现在输出中,因此当前命令字符串按书写方式书写是没有用的。
是否有一个适用于 Mac OS X 的工具可以帮助我执行此操作?
答案1
向字符串添加额外的 grep,但使用 invert 选项删除所有 grep 输出请求:
ps aux | grep ssh | grep remote-host | grep port-forwarding-stmt | grep -v grep
答案2
这个诀窍就是欺骗 grep 不去寻找自己。
... | grep "[s]sh" | ...
答案3
也可以使用 awk:
ps axuwww | awk '!/grep/ && /ssh/ && /remote-host/ && /port-forwarding-stmt/'
ps(1) 的“www”参数指示显示完整的命令行,而不是缩短的版本。
答案4
ps -a -o pid, command | awk '(/[s]sh/ && /remote-host/ && /port-forwarding-stmt/){ print $1}'
结合了一些所述的想法。部分-o
指定我们仅打印 pid 和命令行,并且print $1
仅打印 pid 部分。这[s]sh
使得它无法找到自己(很棒的技巧!)