我拼凑了一个命令来返回正在运行的守护进程的进程 ID:
ps aux | grep daemon_name | awk "{ print \$2 }"
Run Code Online (Sandbox Code Playgroud)
它完美地工作并返回PID,但它也返回第二个PID,这可能是我现在正在运行的进程。有没有办法从返回的 PID 列表中排除我的命令?
我已经对其进行了几次测试,看起来我的命令始终是列表中的第二个 PID,但我不想只获取第一个 PID,以防它不准确。
Ser*_*ikS 28
grep 的-v开关反转结果,将其从队列中排除。所以让它像:
ps aux | grep daemon_name | grep -v "grep daemon_name" | awk "{ print \$2 }"
Run Code Online (Sandbox Code Playgroud)
更新。您还可以使用-Cswitch 来指定命令名称,如下所示:
ps -C daemon_name -o pid=
Run Code Online (Sandbox Code Playgroud)
后者-o确定您想要在列表中的哪些信息列。pid仅列出进程 ID 列。而等号=后pid意味着将是一个没有列标题,所以你只有明确数据- PID的。
希望这可以帮助。
Red*_*ick 24
您可以使用字符类技巧。"[d]" 不匹配 "[d]" 只匹配 "d"。
ps aux | grep [d]aemon_name | awk "{ print \$2 }"
Run Code Online (Sandbox Code Playgroud)
我更喜欢这个而不是使用| grep -v grep.
use*_*686 16
ps如果有更可靠的替代方案,请避免解析的输出。
pgrep daemon_name
pidof daemon_name
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34550 次 |
| 最近记录: |