我已经在这里阅读了几篇关于pgrep'似乎'返回自己的帖子,即使它永远不应该。关键似乎是bash和sh功能之间的区别。除了我的情况,我已经证实sh真的是一个bash的链接。关于pgrep返回自己的确认
- 我在SuSE 12 x86_64的运行
- /bin/sh的是来砸
- /斌/ bash的一个链接是真正的二进制
我有叫Ruby脚本pgrep命令是这样的:
cmd="/usr/bin/pgrep -lf \"#{target}\""
pidList=`#{cmd}`
我需要,因为我实际使用的参数来唯一标识一个特定的Java“过程中要使用完整的命令行。
现在,由于一些不相关的愚蠢,我几乎立即对每个返回的pid执行ps -p
。有一段时间,这让我非常悲伤,因为ps有时候什么都不会返回。最终我能够发现pid上的ps返回pgrep命令的情况。但它是pgrep命令本身,而不是像sh -c "pgrep -f blah"
要回顾一下:
p纤ep永远不会返回本身。但是sh和bash的区别可能会导致它显示一个子shell。但是我证实了sh是一个bash的链接,所以在行为上应该没有区别。
我怀疑(并且正在寻求确认)是因为Ruby反引号而创建了一个额外的子命令,而这正是由pgrep命令拾取的(仅有时间计时问题?)。
这一直是一个真正的痛苦,我想确保我实施的修复将真正使问题消失。鉴于我与,我要么会
- 工作追加
| grep -v grep
我指挥的最后 - 扔掉含有“grep”可以同时通过红宝石内返回的结果循环任何结果的代码脚本
我想,#2是速度更快,但它仍然惹恼我,我一定要过滤掉p纤ep本身。
我在正确的轨道上吗?或者您认为其他方面正在发挥作用吗?
谢谢你的时间!
当''因为它sh'表现为POSIX'sh',不'bash' bash'被调用。 –
啊,那将是失踪的拼图!谢谢! –