我已經在這裏閱讀了幾篇關於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'被調用。 –
啊,那將是失蹤的拼圖!謝謝! –