如何使用命令行参数找到进程的 PID?

如何使用命令行参数找到进程的 PID?

我使用的是 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使得它无法找到自己(很棒的技巧!)

相关内容