2012-06-23 3 views
0

나는 이미 실행중인 프로세스를 죽이려고하는 간단한 스크립트가 있습니다. 같은 posix_kill 사용하고 있습니다. 명령 셸에서 스크립트를 실행하면 스크립트가 제대로 실행되지만 브라우저에서 실행할 때 스크립트가 작동하지 않습니다.브라우저에서 실행할 때 posix_kill이 작동하지 않습니다.

<?php 

    $taskid = 33; 
    killProcess($taskid); 

    function killProcess($taskid) { 
    $ppid = getPID($taskid); 
    echo "process id -- $ppid\n"; 
    $pids = preg_split('/\s+/', `ps -o pid --no-heading --ppid $ppid`); 
    var_dump($pids); 
    foreach($pids as $pid) { 
      if(is_numeric($pid)) { 
      echo "Killing $pid\n"; 
       posix_kill($pid, 15); 
      } 
    } 

    } 
?> 

난 항상 스크립트가 잘 실행되지만 프로세스가 살해되지 않음을 의미 다음과 같은 출력을 얻을 : 프로세스 ID - '4632 배열 (크기 = 3) 0 => 문자열을 '(길이 = 0) 1 => 문자열'4633 '(길이 = 4) 2 => 문자열'(길이 = 0)

4633 죽이는 I는 아파치 "하는 error.log"파일을 조사 브라우저에서 실행할 때마다 다음과 같이 추가 항목이 추가됩니다. [Sat Jun 23 12:24:55 2012] [오류] [clien t 127.0.0.1] 파일이 존재하지 않습니다 : /var/www/favicon.ico

불행히도이 오류는 잘못된 정보에 대해 많은 정보를 제공하지 않습니다. 나는 php.ini 설정을 체크 아웃하고, 아무런 문제가없는 것처럼 보인다. posix_kill이 "disabled_functions"목록이나 기타 프로세스에서 실행되지 못하게하는 다른 설정에 표시되지 않습니다.

도움을 주시면 감사하겠습니다.

감사합니다, 카필

답변

3

오류 메시지가 당신의 문제와는 아무 상관이있다. 구성하지 않은 사이트의 아이콘을 묻는 브라우저입니다.

이제 실제 문제에 대해 : apache 사용자는 프로세스를 죽일 권한이 없습니다. 프로세스가 다른 사용자 계정으로 시작된 경우 웹 서버 내에서 프로세스를 종료 할 수 없습니다. 모든 로컬 사용자가 로그인하여 다른 사용자의 프로세스를 죽일 수있는 다중 사용자 시스템을 상상해보십시오. 이는 유닉스 사용 권한 모델이 아닙니다 ...

sudoexec과 함께 사용하거나 다른 방법으로 신호. 또는 프로세스가 웹 서버가 무언가를 수행하도록 청취 한 다음 자체를으로 삭제할 수 있습니다. 또는 시스템 관리 유형의 작업에 PHP와 같은 웹 서비스 언어를 사용하지 마십시오 : cron 또는보다 적절한 도구를 사용하십시오.

+2

네 .... 그게 정확히 이유는 ....... 나는 PHP 데몬에서 프로세스를 해고하고 브라우저에서 그것을 죽이려고했다 ... 당연히 죽일 수있는 권한이 없을 것이다. . 많이 감사하는 Borealid! –