Witam wszystkich forumowiczów. Nurtuje mnie ostatnio jeden problem, na który nie mogę znaleźć odpowiedzi.

Ogólnie muszę zrobić funkcję zliczającą ile jest uruchomionych procesów z daną nazwą. W Linuxie robię to zawsze tak:
Kod
pgrep -f "nazwa procesu" | wc -l

No i otrzymuję odpowiednio 0 jeśli taki proces w ogóle nie jest uruchomiony, 1 jeśli jest tylko 1 itd...

Teraz jeśli w php zrobię analogicznie:
  1. <? echo exec("pgrep -f \"$nazwa_procesu\" | wc -l"); ?>

to otrzymuję wartości o 1 większe. Czyli jeśli proces nie jest uruchomiony to zwraca mi 1, jeśli jest 1 to zwraca mi 2 itd... Może mi ktoś wytłumaczyć dlaczego tak się dzieje? Testowałem to już na 2 różnych Linuxach, jeden z PHP 5.2.2 drugi 5.2.4. Uruchamiałem polecenie pgrep jako użytkownik apache w shellu i cały czas to samo. Z basha zawsze wartości o 1 mniejsze. Po zmianie funkcji exec() na shell_exec() cały czas jest to samo niestety.

Znalazłem rozwiązanie. Może akurat się komuś przyda.
Otóż polecenie pgrep wołane z poziomu php działa trochę błędnie ponieważ znajduje też samą siebie. Aby tego uniknąć wystarczy trochę zmienić parametry wołania polecenia.
Prawidłowo powinno wyglądać to tak:
  1. <? echo exec("pgrep -f \"$nazwa_procesu\" -c"); ?>