Pregunta

suponiendo que yo sepa el PID de un proceso y quiero hacer una búsqueda en ps -A, ¿cómo lo hago? He intentado hacer esto:

echo "Enter PID to search: "
read PID
search=$(ps -A | grep -v PID | awk '{print $1}') 

Esto me vuelve con una larga lista de PID. Entonces, ¿cómo puedo obtener utilizar cada valor individual de la salida y hacer:

if [ "$PID" = "*each_value_in_search_list*" ]; then
........

En este caso estoy tratando de comparar lo que el usuario escribe con la salida de mi mando, así que ¿cómo lo hago? Estoy haciendo el camino correcto en el primer lugar? O hay alguna otra manera de hacer esto?

Gracias por su ayuda, todos los que respondieron a esta pregunta. (:

¿Fue útil?

Solución

El modificador -v para grep realiza una búsqueda invertida, en otras palabras, obtendrá todo lo que no queremos. Después se establece una variable, se debe también hacer referencia a ella con el prefijo $.

Probar

#!/bin/bash

echo "Enter PID to search: "
read PID
search=$(ps --pid $PID -o comm=)

if [ $search ]
    then
        echo "Program: $search"
    else
        echo "No program found with PID: $PID"
fi

Otros consejos

Esta grepping la salida de ps para todas las líneas que no contienen la cadena literal "PID". Que desea utilizar $PID en lugar de utilizar el variables llamado PID en lugar del literal "PID". Además, puesto que no desea que los falsos positivos en otros campos que coinciden con el PID, solo partido en la primera columna:

search=$(ps -A | grep "^ *$PID\>" | awk '{print $1}')

La secuencia "\>" de escape coincide con la cadena vacía al final de una palabra.

Algunas versiones de ps soportan la opción -p a sólo le dará la información sobre un PID específico, por lo que no es necesario grep o awk:

search=$(ps -p $PID)

Su "grep -v PID" es un truco estándar para eliminar la línea de rumbo, no una forma de obtener los datos reales PID de la salida.

Si lo que quieres es los detalles de ese proceso, sólo tiene que utilizar:

search=$(ps -A | awk -v pid=$PID '$1==pid{print pid}')

que establecerá búsqueda al PID de que se trate si existe o la cadena vacía de lo contrario, que es lo que parecen querer.

Hay un problema con hacer una búsqueda a ciegas para el PID (en contraposición a la comprobación de la columna 1 con awk) es que puede recoger las líneas en que la EPI se muestra en la cadena de comandos.

Si la raíz de la pregunta es para comprobar si el PID introducida corresponde a una entrada de proceso (raíz). Más específica, si usted es capaz de enviar una señal a ese proceso (usuario):

if kill -0 $PID >/dev/null 2>&1; then ...

Podría ser, por supuesto, que esto no es en absoluto lo que quiere. Me sentí libre de "interpretar" su pregunta un poco;)

<?php
echo shell_exec("ps -Ao cmd,pid|grep -P ' {$pid}$'");
?>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top