Answers:
grep的-v
开关会反转结果,将其从队列中排除。因此,使其像:
ps aux | grep daemon_name | grep -v "grep daemon_name" | awk "{ print \$2 }"
更新。您还可以使用-C
switch来指定命令名称,如下所示:
ps -C daemon_name -o pid=
后者-o
确定您要在清单中的信息的哪些列。pid
仅列出进程ID列。而等号=
后pid
意味着将是一个没有列标题,所以你只有明确数据- PID的。
希望这可以帮助。
您可以使用字符类技巧。“ [d]”与“ [d]”仅与“ d”不匹配。
ps aux | grep [d]aemon_name | awk "{ print \$2 }"
我更喜欢使用| grep -v grep
。
| grep -v grep
仍将事情保持简单,并且当我重新访问代码时将更容易理解。
"[d]" does not match "[d]" only "d"
吗?
grep
命令将与命令本身的ps
输出行不匹配grep
(在原始问题中,tak称为“第二个PID”)。表达a[xy]d
并没有匹配的文字a[xy]d
,但它确实匹配的文本axd
或文本ayd
。因此,表达式[f]oo
匹配文本,foo
但不匹配text [f]oo
。我希望这很清楚。
ps
如果有更可靠的选择,请避免解析输出。
pgrep daemon_name
pidof daemon_name
pgrep
pidof
完全匹配时,按子字符串搜索-我需要什么!谢谢!
使用pgrep
查找按名称进程的PID:
pgrep proc_name
在结果(-l
)中带有额外的进程名称:
pgrep -l proc_name
查找并显示进程名称(-l
)和参数(-f
):
pgrep -lf proc_name_or_argument
好处pgrep
是它永远不会将自己报告为匹配项。但是您不需要通过pid pgrep
,然后通过杀死相应的进程kill
。使用pkill
来代替:
pkill proc_name
指定SIGKILL
信号(-9
或-KILL
),而不是SIGTERM
(默认情况下):
pkill -9 proc_name
查找进程名称(-l
)和参数(-f
),-I
在通过SIGKILL
信号(-9
或-KILL
)将其杀死之前,先进行确认():
pkill -KILL -Ilf proc_name_or_argument
注意,该-I
选项仅在某些版本上可用pkill
,例如OS X Mavericks上的版本。
如果您使用的是bash,还可以通过以下方式通过以下方式进行操作: ps -eaf
PIDS=$(ps -eaf)
PID=$(echo "$PIDS" | grep "process_name" | awk '{print $2}')
echo $PID
ps -eaf | grep "process_name" | awk '{print $2}'
该行返回除“ grep”外的pid(进程ID)
PID=$(ps aux | grep '/usr/bin/python2.7 manage.py SES__boto3_sqs_read' | grep -v grep)