我正在尝试获取某个服务的 PID。我正在尝试使用以下命令来做到这一点:
ps aux | grep 'DynamoDBLocal' | awk '{print $2}'
给出输出:
1021
1022
1161
这将返回 3 个 PID、2 个我想要的服务和 1 个用于刚刚执行的 grep。我想从列表中删除最后一个 PID(来自 grep 的那个)。
我怎样才能做到这一点?
只需使用pgrep
,在这种情况下它是正确的工具:
pgrep 'DynamoDBLocal'
使用grep -v
:
ps aux | grep 'DynamoDBLocal' | grep -v grep | awk '{print $2}'
如果你pgrep
的系统中有
pgrep DynamoDBLocal
你可以说:
ps aux | grep '[D]ynamoDBLocal' | awk '{print $2}'
试试看pidof
,应该pid
直接给你。
pidof DynamoDBLocal
只需一次调用awk
ps aux | awk '!/awk/ && /DynamoDBLocal/{print $2}'
回答原始问题:如何从输出中删除行:
ps aux | grep 'DynamoDBLocal' | awk '{print $2}' | head --lines=-1
head
允许您查看 X(默认 10)的第一行,无论是什么进来。给定一个带有减号的值 X,它会显示除最后 X 行之外的所有行。'逆'是tail
,顺便说一句(当您对最后X 行感兴趣时)。
但是,鉴于您寻找 PID 的具体问题,我建议pgrep
(perreals 回答)。
我不确定这ps aux | grep '...'
是正确的方法。
但假设它是正确的方式,你可以做
ps aux | grep '...' | awk '{ if (prev) print prev; prev=$2 }'