私は、pgrepがそれが決してすべきではないにもかかわらず「復帰する」と思われるケースについて、ここでいくつかの記事を読んでいます。キーは、bashとshがどのように機能するかの違いと思われます。私の場合を除いて、私はshが本当にbashへのリンクであることを確認しました。自分自身を返すpgrepの確認
- 私は、SuSE 12 x86_64の上で実行しているよ
- /binに/ shが
- /binに/ bashのをbashにリンクされ、私はRubyのスクリプトを呼び出している本当のバイナリ
ですこのようなのpgrep:
cmd="/usr/bin/pgrep -lf \"#{target}\""
pidList=`#{cmd}`
は、私が実際に一意に特定の「Javaのプロセスを識別するために、引数を使用していますので、完全なコマンドラインを使用する必要があります。
ここで、何らかの無関係な愚かさのために、返されたpidのそれぞれに対して、すぐにps -p
を実行します。しばらくの間、psは時には何も返さないので、大きな悲しみを引き起こしていました。最終的に私はpidのpsがpgrepコマンドを返したケースをキャッチすることができました。しかし、それは、要約するとsh -c "pgrep -f blah"
のようなものpgrepコマンド自体ではなかった。
pgrepコマンド自体を返すことはありません。しかし、shとbashの違いによって、サブシェルが表示されることがあります。しかし、shがbashへのリンクであることを確認したので、動作に違いはありません。
Rubyのバッククォートのために余分なサブコマンドが作成されていて、それは(時にはタイミングの問題のみが)pgrepコマンドで取り上げられるものです。
これは本当の苦痛であり、私が実装した修正が本当に問題を遠ざけることを確かめたいと思います。私が働いているコードを考えると、私はどちらかのRuby内の返された結果をループしながら、「グレップ」を含むすべての結果を捨てる私のコマンド
| grep -v grep
を追加-
に行きますよスクリプト
私は#2の方が高速ですが、それでも私はpgrep自体を除外しなければならないということに私は気付きます。
私は正しいトラックにいるのですか、それとも何か他のものが遊んでいると思いますか?
ありがとうございました!
'bash'が' sh'として呼び出されるとき、それは 'bash'ではなく' sh'として動作します。 –
ああ、それは不足しているパズルピースだろう!ありがとう! –