2014-12-18 8 views
-1

SSH를 사용하여 서버를 제거하는 PHP 스크립트를 작성하고 있습니다. 내가해야 할 일은 특정 프로세스가 실행 중인지 아닌지 확인하여 종료 할 수 있는지 확인하는 것입니다. phpseclib을 사용하고 있습니다. 다음 코드는 서버에 연결하고 프로세스를 나열하지만 각 프로세스의 프로세스 ID를 얻는 데 정말로 걸림돌이됩니다! (여기에 32405 및 32407입니다) I는 PID를 얻기 위해 노력했다특정 프로세스의 PID를 얻는 방법

root  32405  1 3 09:45 ?  00:03:30 php /afghanwiz/distributor1.php 
root  32407  1 3 09:45 ?  00:03:33 php /afghanwiz/distributor2.php 

라인과 단어하지만 성공을 폭발 사용 :

include('Net/SSH2.php'); 
$ssh = new Net_SSH2('192.168.1.1'); 
$ssh->login('username', 'password') or die("SSH Login failed"); 
$ps = $ssh->exec('ps -ef | grep ".php"'); 
echo $ps; 

출력이다. 누구든지 그런 문제에 대해 알고 있습니까? 당신은 그들이 루트로 실행되고 있는지 알고 있다면

답변

1

이 당신을 위해 작동 될 수 있습니다

$output = <<<EOF 
root  32405  1 3 09:45 ?  00:03:30 php /afghanwiz/distributor1.php 
root  32407  1 3 09:45 ?  00:03:33 php /afghanwiz/distributor2.php 
EOF; 

preg_match_all('/root\s+(\d+)/', $output, $m); 
var_dump($m[1]); 

를 사용자 이름이 무엇이든, 같은 될 수있는 경우 :

preg_match_all('/[a-z_][a-z0-9_]{0,30}\s+(\d+)/', $output, $m); 

이 작동합니다. Btw, 사용자 이름 정규식은 여기에서 가져 왔습니다 : https://stackoverflow.com/a/6949914/171318 고마워!

+0

는 정말 고마워요! – goseo

+0

당신은 오신 것을 환영합니다. :)'pidof' 명령에 대해서 알고 싶을 수도 있습니다. 서버에 설치되어 있으면 pid를 공백으로 구분 된 목록으로 얻을 수 있습니다. – hek2mgl

0

당신은 내가 아는 그 아니 아주 잘내는 솔루션을 같은 것을 할 수 있지만 그것은 당신의 목적을 제공합니다 :

$arr = explode('  ',$ps); 
for ($i=1; $i<count($arr); $i=$i+3) 
    echo $arr[$i];