我需要解析
0 R username+ 13790 13743 0 80 0 - 28162 - 19:07 pts/0 00:00:00 grep --color=auto pm2
4 S root 25197 1 0 80 0 - 237119 ep_pol Apr05 ? 00:00:32 node /usr/local/lib/node_modules/pm2/bin/pm2
输出类型并找到该进程的 PID /usr/local/lib/node_modules/pm2/bin/pm2
。
到目前为止
PROCESS_ID=$(ps -elf | grep pm2 | grep -v grep | awk 'FNR<2{print $4}')
但这只能获取第一行的 PID。无法保证正确的 PID 是哪一行,因为 upstart 程序有时会显示 2-3 个此 grep 的结果。我想我需要一种方法来过滤要读取到 awk 的行,因为所需的行一次只能出现一行。任何帮助表示感谢
答案1
看一眼pgrep
:
pgrep -f /usr/local/lib/node_modules/pm2/bin/pm2
答案2
awk 可以通过以 /regex/ 开头的表达式进行过滤
我变了
ps -elf | grep pm2 | grep -v grep | awk 'FNR<2{print $4}'
到
ps -elf | grep pm2 | grep -v grep | awk '/node_modules/FNR<2{print $4}'
并且成功了。您还可以通过转义斜杠来搜索更长的路径:
ps -elf | grep pm2 | grep -v grep | awk '/\/lib\/node_modules/FNR<2{print $4}'
也有效
尽管 awk 很可怕,但这篇文章却非常简单 http://www.tecmint.com/use-linux-awk-command-to-filter-text-string-in-files/