bash - 如何使用带斜杠的 pgrep?
问题描述
我想让以下 bash 代码工作:
#!/bin/bash
SERVICE="/usr/sbin/some_command"
if pgrep -x "$SERVICE" >/dev/null; then
echo "$SERVICE is already running"
else
$SERVICE some_arguments
fi
我认为斜线/
会引起一些麻烦,但我仍然想保留它。
解决方案
在 Linux 上,您需要使用-f
来匹配整个命令行,因为没有它pgrep
只会查看包含 no且最多 15 个字符的进程名称/
SERVICE="/usr/sbin/some_command"
if pgrep -f "$SERVICE" >/dev/null; then
echo "$SERVICE is already running"
else
$SERVICE some_arguments
fi
但是请注意,命令行可能根本不包含完整路径,因为可以执行空文件$0
,因此在这种情况下,您将无法获得所需的输出
来自man pgrep
:
-f
,--full
- 该模式通常仅与进程名称匹配。设置时
-f
,将使用完整的命令行。...
笔记:
用于匹配的进程名称限于 /proc/pid/stat 的输出中存在的 15 个字符。使用
-f
选项来匹配完整的命令行,/proc/pid/cmdline
.
推荐阅读
- python - 无法从 spacy 中的拥抱脸模型仓库初始化模型
- javascript - 我在 JSP 中写了一个相对路径,但它不起作用
- python - Python 列表理解性能
- python - 如何将透明徽标变为灰色
- json - 如何在 Pandas 中将 JSON 字符串解析为具有特定模式的 StructType 并发送到具有 Record 类型的 BigQuery 表
- reactjs - 面临 npm 安装包中的问题
- react-native - React Native Navigation:重置 Stack Navigator
- python - 在 / 找不到页面
- javascript - ReferenceError: primordials 未定义 - Node.js (not gulp)
- android - 如何在 android 的同一视图上使用 OnClick、OnLongClick 和 OnTouch?