如何只输出正在运行的进程的用户

时间:2018-05-21 18:32:48

标签: awk grep ps

当我ps aux | grep mongod时,我得到了

mongod    53830  0.1  0.3 247276 27168 ?        Sl   Apr04 128:21 /var/lib/mongodb-mms-automation/mongodb-mms-monitoring-agent-5.4.4.366-1.rhel7_x86_64/mongodb-mms-monitoring-agent
mongod   104378  0.6  0.8 469384 71920 ?        Ssl  Mar22 571:03 /opt/mongodb-mms-automation/bin/mongodb-mms-automation-agent -f /etc/mongodb-mms/automation-agent.config -pidfilepath /var/run/mongodb-mms-automation/mongodb-mms-automation-agent.pid >> /var/log/mongodb-mms-automation/automation-agent-fatal.log 2>&1
mongod   104471  0.6  5.4 1993296 433624 ?      Sl   Mar22 578:03 /var/lib/mongodb-mms-automation/mongodb-linux-x86_64-3.4.13/bin/mongod -f /data/mdiag/data/automation-mongod.conf

但是,我只对输出第三个条目的user感兴趣,该条目运行实际的mongod进程。我希望输出只是

mongod

我如何调整psgrepawk来执行此操作?

5 个答案:

答案 0 :(得分:1)

将其传输到awk并搜索:

 ps aux | grep mongod | awk '/bin\/mongod /{print $8}'

有了这个你可以放弃grep并让awk进行搜索:

 ps aux |  awk '/bin\/mongod /{print $8}'

这是在搜索字符串" bin / mongod"记录中的任何地方,然后返回该记录的第8个位置。

答案 1 :(得分:1)

尝试使用shell命令来获取该用户很可能会破坏。你能使用PID选项启动mongod吗?

/var/lib/mongodb-mms-automation/mongodb-linux-x86_64-3.4.13/bin/mongod -f /data/mdiag/data/automation-mongod.conf --pidfilepath /run/mongodb-pid.txt

然后,您只需运行ps $(cat /run/mongodb-pid.txt)即可获得所需的特定流程。

答案 2 :(得分:1)

最好指定模式以匹配我们感兴趣的COMMAND字段的第一部分的结尾。另外,使用括号表达式代替\/至少使我的眼睛看起来更快乐用于匹配文件路径的模式。

ps aux | awk -v command=11 -v user=1 '$command ~ /[/]bin[/]mongod$/ { print $user }'

答案 3 :(得分:0)

或许过滤出代理商?

$ ps aux | awk '/mongod/ && !/agent/{print $1}'

答案 4 :(得分:0)

关注awk可能会有所帮助。

ps aux | awk '/mongod/ && /automation-mongod.conf/{print $8}' 

OR

ps aux | awk '/mongod/ && /\/data\/mdiag\/data\/automation-mongod.conf/{print $8}'