这是我的 ps aux 的输出:
ps aux | grep "node"
root 2501 0.0 3.4 720400 68512 ? Sl 16:09 0:03 node /etc/skbx/host/skbx.js 8081 tula13 8082 8084 8085 10.8.0.6
root 20586 0.0 0.1 17396 2664 pts/16 S+ 21:29 0:00 grep --color=auto node
忽略第二个,我们有一个节点进程。我需要在 bash 中准确找出正在执行 skbx.js 的节点进程的 PID。
我怎么能这样做呢?谢谢。
答案1
一般来说,如果您正在查找已知命令行的 PID,pgrep
则更可取,ps | grep
因为您不需要过滤输出来提取 PID。您可以使用pgrep
with-f
来匹配完整的命令行:
pgrep -f 'node /etc/skbx/host/skbx.js'
您还可以通过父进程 ID 和控制终端等条件来定位进程。
如果没有pgrep
安装,可以grep
在管道中使用。在下面的示例中,我们在提供的模式中使用字符类grep
来防止grep
其自身出现在输出中。这比通过管道将输出传递到grep -v grep
或类似的输入要少:
ps aux | grep '[n]ode /etc/skbx/host/skbx.js' | awk '{print $2}'
grep
输出中列出的命令将ps
包含方括号文字,这些文字与 所使用的结果模式不匹配grep
。