Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

290
Vistas
Encuentre los PID de los procesos en ejecución y guárdelos como una matriz

Estoy tratando de escribir un script bash para encontrar el PID de un proceso en ejecución y luego emitir un comando de eliminación. Lo tengo funcionando parcialmente, pero el problema al que me enfrento es que puede haber más de un proceso en ejecución. Quiero emitir un comando de eliminación para cada PID encontrado.

Supongo que necesito poner cada PID en una matriz, pero no sé cómo hacerlo.

Lo que tengo hasta ahora:

 pid=$(ps -fe | grep '[p]rocess' | awk '{print $2}') if [[ -n $pid ]]; then echo $pid #kill $pid else echo "Does not exist" fi

Lo que esto hará es devolver todos los PID en una sola línea, pero no puedo entender cómo dividir esto en una matriz.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Aquí hay un pequeño forro que podría ayudar

 for pid in `ps -ef | grep your_search_term | awk '{print $2}'` ; do kill $pid ; done

Simplemente reemplace your_search_term con el nombre del proceso que desea eliminar.

También puede convertirlo en un script y cambiar your_search_term por $1

EDITAR: Supongo que debería explicar cómo funciona esto.

Las marcas de retroceso `` recopilan la salida de la expresión que contiene. En este caso, devolverá una lista de pids para un nombre de proceso.

Usando un ciclo for podemos iterar a través de cada pid y matar el proceso.

EDIT2: reemplazó matar -9 con matar

over 4 years ago · Santiago Trujillo Denunciar

0

No necesita usar una matriz si va a iterar inmediatamente sobre los resultados y realizar una acción:

 for pid in $(ps -fe | grep '[p]rocess' | grep -v grep | awk '{print $2}'); do kill "$pid" done

Tenga en cuenta que tenemos que excluir el pid de grep de la lista de procesos para eliminar. O simplemente podríamos usar pgrep(1) :

 for pid in $(pgrep '[p]rocess'); do kill "$pid" done

Si realmente necesitara almacenar los pids en una matriz, pgrep es la forma en que lo haría:

 pids=( $(pgrep '[p]rocess') )

Volver al proceso de matanza. Todavía podemos hacerlo mejor. Si solo estamos usando pgrep para obtener una lista de procesos para eliminarlos, ¿por qué no ir directamente al programa hermano de pgrep : pkill(1) ?

 pkill '[p]rocess'

Como resultado, no hay necesidad de scripts de bash en absoluto.

over 4 years ago · Santiago Trujillo Denunciar

0

No sé por qué haría grep para matar un proceso, a menos que no supiera el nombre del comando. La mayoría de las versiones modernas de ps tienen las banderas

 -C cmdlist Select by command name. This selects the processes whose executable name is given in cmdlist.

y

 -o format User-defined format. format is a single argument in the form of a blank-separated or comma-separated list, which offers a way to specify individual output columns. The recognized keywords are described in the STANDARD FORMAT SPECIFIERS section below. Headers may be renamed (ps -o pid,ruser=RealUser -o comm=Command) as desired. If all column headers are empty (ps -o pid= -o comm=) then the header line will not be output. Column width will increase as needed for wide headers; this may be used to widen up columns such as WCHAN (ps -o pid,wchan=WIDE- WCHAN-COLUMN -o comm). Explicit width control (ps opid, wchan:42,cmd) is offered too. The behavior of ps -o pid=X, comm=Y varies with personality; output may be one column named "X,comm=Y" or two columns named "X" and "Y". Use multiple -o options when in doubt. Use the PS_FORMAT environment variable to specify a default as desired; DefSysV and DefBSD are macros that may be used to choose the default UNIX or BSD columns.

Así que puedes hacer

 ps -o pid= -C commandName

Devolverá el pid de todos los procesos llamados exactamente commandName y es más limpio y rápido. O matar un bucle

 while read -r pid; do kill "$pid" done < <(ps -o pid= -C commandName)

Pero en realidad, siempre deberías poder hacer

 > pkill commandName
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda