Answers:
grep的-v开关会反转结果,将其从队列中排除。因此,使其像:
ps aux | grep daemon_name | grep -v "grep daemon_name" | awk "{ print \$2 }"
更新。您还可以使用-Cswitch来指定命令名称,如下所示:
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
pgreppidof完全匹配时,按子字符串搜索-我需要什么!谢谢!
使用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)