2011-08-24 8 views

Respuesta

16
exec("ps auxwww|grep sample.php|grep -v grep", $output); 

Esto sólo funcionaría, sin embargo, si PHP se ejecuta en modo CGI. Si se está ejecutando como una cosa de tipo SAPI, nunca verás "sample.php" en la lista de procesos, solo 'httpd'.

+0

Gracias, funciona, pero ¿cuáles son los números que se muestran aquí? '1025 19622 0.0 0.0 5336 1308? S 02:15 0:00 wget -q http: // www.example.com/sample.php' –

+0

ID del proceso principal, ID del proceso, uso de la CPU, uso de memoria, etc ... mira 'man ps' para obtener más información . –

+0

Thanx @Marc para su respuesta –

0

No hay. Porque PHP se ejecuta a través de apache/nginx. En el caso de acceso a línea de comandos, el proceso se denomina PHP, no el nombre real de su secuencia de comandos.

0

Depende de muchos factores, entre los que se incluyen el sistema operativo, la versión de PHP, etc., pero podría intentar usar señales para obtener un script que le dé su nombre y luego rescindir si coincide. O bien, haga que el script registre su pid y luego compare con los procesos en ejecución.

http://stuporglue.org/handling-signals-in-php/

0

esto ayudó a matar a los procesos de delincuentes a través de un parámetro url. Pensé que contribuiría a la discusión en caso de que alguien más aún esté buscando respuestas.

carga yikes.php. identifique la identificación del proceso (debe ser el primer número entero al que llegue en cada índice de la matriz). cópielo y péguelo en la url como? pid = XXXXX. y se ha ido.

//http://website.com/yikes.php?pid=668 
$pid = $_GET['pid']; 
exec("ps auxwww|grep name-of-file.php|grep -v grep", $output); 
echo '<pre>'; 
print_r($output); 
echo '</pre>'; 
// 
exec("kill $pid");