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); 
      } 
    } 

    } 
?> 

Я всегда получаю следующий вывод, что означает, что скрипт выполняется хорошо, но этот процесс не убить: идентификатора процесса - 4632 массива (размер = 3) 0 => строки ' '(длина = 0) 1 => строка '4633'(длина = 4) 2 => строка ''(длина = 0) Killing 4633

Я проверил файл апачский "error.log", и обнаружил, что для каждого запуска, который я делаю из браузера, и добавляется дополнительная запись: [Сб июн 23 12:24:55 2012] [error] [clien t 127.0.0.1] Файл не существует: /var/www/favicon.ico

К сожалению, эта ошибка не дает мне много информации о том, что происходит не так. Я проверил настройки php.ini, и, похоже, что-то не так (в соответствии с любым ограниченным пониманием, которое у меня есть). Я не вижу posix_kill в списке «disabled_functions» и т. Д. Или любые другие настройки, которые мешают мне выполнять процесс.

Искренне благодарен за помощь!

Спасибо, Капил

ответ

3

Сообщение об ошибке не имеет ничего общего с вашей проблемой. Это браузер, запрашивающий значок вашего сайта, который вы не настроили.

Теперь о фактической проблеме: у пользователя apache, вероятно, нет разрешений, чтобы убить ваш процесс. Если процесс запускался под другой учетной записью пользователя, вы не можете его убить с веб-сервера. Представьте себе систему многопользовательской, где любой локальный пользователь может войти в системе и убить все остальные процессы - это не модель разрешений Unix ...

Вы можете использовать ограниченный sudo с exec, или в противном случае предположит разрешение перед отправкой сигнал. Или вы можете заставить процесс прослушать веб-сервер, чтобы что-то сделать, а затем убить сам. Или, еще лучше, не используйте веб-язык, например PHP, для задач типа системного администрирования: используйте cron или более подходящий инструмент.

+2

Да .... это именно причина ....... Я уволил процесс от php-демона и пытался его убить из браузера ... конечно, у него не будет прав на убийство. Большое спасибо! –