![]() |
1
16
试试这个:
processname第一个字母周围的括号表示不需要“grep-v grep”,而-q表示不需要管道到/dev/null $?给出上一个执行命令的返回代码。因此,如果它是0,测试将表明“grep”是否找到了它要查找的内容。 更新 如果您的进程名真的很短(比如说“cup”),那么您可能会得到一个误报,因为它也可能与其他进程匹配(比如说“cupsd”)。你可以通过让grep匹配整个单词来克服这个问题-添加“-w”标志。 并不是说这项技术并不完美。您可能会在用户名/日期字段中找到匹配的条目。如果发生这种情况,在做grep之前,查找“man ps”,并对打印出来的内容进行更多的选择。或者,使用awk对输出进行预筛选,以仅提取显示进程/cmd名称的列。例如:
更新2 您也可以使用下面答案中建议的pgrep。 对于非常短的进程名,您可能需要在进程名前后指定单词边界(\b),以防止过度匹配(如上所述)。
更新3 从更新后的问题中,我看到您正在从init脚本运行它。pgrep与脚本本身匹配总是有危险的。尝试:
从pgrep匹配项中排除脚本的PID。 更新4 (最后更新?手指交叉) 如果init脚本是通过“service”命令运行的,那么我们也需要过滤掉父PID。怎么样:
|
![]() |
2
2
可能是因为
作为另一种选择,您可以尝试
|
![]() |
3
1
G'Day. 作为旁白,而不是
试着去做
ps正在列出grep函数,因为它在进程列表中看到字符串“grep processname”,而grep正在为字符串“processname”传递该字符串。 对“[p]p rocessname”的grepping将只匹配“p rocessname”,而不匹配字符串“grep[p]p rocessname”。 |
![]() |
4
-1
你没有做测试。在测试条件周围放置括号,如下所示: 如果[测试条件] |
![]() |
CalculusLover · 在本例中,fork()是如何工作的? 3 年前 |
![]() |
jjmerelo · 使用Proc::Async从绑定管道读取 7 年前 |
![]() |
jatinBatra · 编译后生成的二进制文件会发生什么情况[关闭] 7 年前 |
![]() |
Jacobo · 从Java调用具有输入和输出重定向的C可执行文件 7 年前 |
![]() |
Ran · 每当我尝试执行命令行提示符时,Unity就会阻塞 7 年前 |
![]() |
Hatshepsut · 使用命令行参数使用region调用子流程 7 年前 |