2011-09-21 5 views
1

내가 여기에 서버 관리자를 만들려고 노력하고있어 구문 분석 내가 지금까지 무엇을 가지고). 그러나 목록의 끝에 어떤 이유로이있다 : 4,793 명령이 발행그렙 출력

  1. 프로세스 ID : skulltag 서버
  2. 과정 여기
    sh -c ps ax --format command | grep skulltag grep skulltag 
    

    는 참조의 전체 출력 ID 4956 명령 발행 : skulltag-server -port 13000
  3. PROCESS ID 4958 명령 발행 : skulltag-server -port 13001 sh -c ps ax --format 명령 | 그렙 skulltag 그렙 skulltag

그 라인을 제거 할 수있는 가장 쉽고 효과적인 방법이 있을까요, 내가 그것을 어떻게 할 것인가? 감사.

+5

난 당신이 요구하는 것을 이해한다면, 이것에 정규 솔루션 자체가 일치하지 않는 패턴, 예를 들어, 사용하는 것입니다 'grep [s] kulltag'. – tripleee

+2

"어떤 이유로 든"- 실행중인 명령이 실행 중이므로 실행중인 프로세스 목록에 표시됩니다. – Quentin

+1

'pgrep'을 가지고 있다면 왜 다시 구현하고 싶습니까? – tripleee

답변

1

신속하고 지저분한 해결책은 | grep -v grep을 명령에 추가하는 것입니다.

ps ax --format command | grep skulltag 

이 사람 :이

+1

정규 표현식을 수정하는 것이 더 우아합니다. – tripleee

2

변경

ps ax --format command | grep [s]kulltag 

그런 식으로, grep 명령 자체는 그렙 정규 표현식과 일치하지 않는 문자열 '[S] kultag'를 포함 'kultag'.

또한 두 가지 제안 사항 : 1. 귀하의 초기 ps | grep과 나중에 pgrep이 정렬됩니다. 대신, 하나의 pgrep을 사용

pgrep -afl skulltag 

그리고 루프 2. 1로 시작, 편곡의 과정을 건너 뜁니다 [0].

귀하의 PHP는이 같은 일을 다시 작성할 수 있습니다

:

$processes = explode("\n", shell_exec('pgrep -afl skulltag')); 
foreach($processes as $i => $process) { 
    ($pid, $command) = explode(' ',$process,2); 
    echo $i+1,". PROCESS ID ",$pid," Command issued: ",$command; 
    echo '<br>'; 
}