1

我正在尝试获取某个服务的 PID。我正在尝试使用以下命令来做到这一点:

ps aux | grep 'DynamoDBLocal' | awk '{print $2}'

给出输出:

1021
1022
1161

这将返回 3 个 PID、2 个我想要的服务和 1 个用于刚刚执行的 grep。我想从列表中删除最后一个 PID(来自 grep 的那个)。

我怎样才能做到这一点?

4

7 回答 7

7

只需使用pgrep,在这种情况下它是正确的工具:

pgrep 'DynamoDBLocal'
于 2013-11-01T08:56:17.477 回答
3

使用grep -v

ps aux | grep 'DynamoDBLocal' | grep -v grep | awk '{print $2}'

如果你pgrep的系统中有

pgrep DynamoDBLocal
于 2013-11-01T08:53:33.503 回答
3

你可以说:

ps aux | grep '[D]ynamoDBLocal' | awk '{print $2}'
于 2013-11-01T08:54:16.303 回答
3

试试看pidof,应该pid直接给你。

pidof DynamoDBLocal
于 2013-11-01T09:08:43.403 回答
3

只需一次调用awk

ps aux | awk '!/awk/ && /DynamoDBLocal/{print $2}'
于 2013-11-01T08:56:51.460 回答
2

回答原始问题:如何从输出中删除行

ps aux | grep 'DynamoDBLocal' | awk '{print $2}' | head --lines=-1

head允许您查看 X(默认 10)的第一行,无论是什么进来。给定一个带有减号的值 X,它会显示除最后 X 行之外的所有行。'逆'是tail,顺便说一句(当您对最后X 行感兴趣时)。

但是,鉴于您寻找 PID 的具体问题,我建议pgrep(perreals 回答)。

于 2013-11-01T09:11:17.540 回答
1

我不确定这ps aux | grep '...'是正确的方法。

但假设它是正确的方式,你可以做

ps aux | grep '...' | awk '{ if (prev) print prev; prev=$2 }'
于 2013-11-01T08:56:59.577 回答