¿Cómo encontrar procesos aún en ejecución en una terminal?

12

Cuando intento cerrar una pestaña en Gnome Terminal, dice:

¿Cerrar esta terminal? Todavía hay un proceso ejecutándose en este terminal. Cerrar la terminal lo matará.

¿Cómo puedo saber qué sigue funcionando? Tenga en cuenta que no hay nada en la salida de jobs. Gracias.

Tim
fuente
1
Si se encuentra en la línea de comandos del shell mientras se muestra este mensaje, probablemente se trate de un shell anidado (no el que inició directamente el emulador de terminal). Tal vez usted ha comenzado una screen, tmux, script, ssh, mcy convertido a los paneles de apagado, o simplemente otro proyectil por ejemplo, escribiendo bash, o algo a lo largo de estas líneas. Presione Ctrl + D o escriba exitpara salir de su shell, verá dónde termina.
egmont
Gracias. después exit, la pestaña del terminal gnome no se cierra.
Tim
1
Un segundo exitprobablemente lo cerrará entonces. @egmont puedes mover esto a una respuesta por favor.
Videonauth

Respuestas:

12
ps T

Selecciona todos los procesos asociados con el terminal.

tmcp
fuente
Bien, aunque puede ser un poco engañoso. Los procesos generados a través del nohupcomando se desconectan del terminal, por lo que no bloquee su cierre. Pero todavía están listados con este comando.
Sergiy Kolodyazhnyy
O simplemente ps para el caso
usuario10089632
1

Puede echar un vistazo a los procesos que enumeran el PID de su shell como padre. Como puede saber o no, podemos especificar el psformato

SHELLPID=$$ ; ps -e  -o cmd,pid,ppid | awk -v shell=$SHELLPID  '$NF~shell'   

Aquí, obtenemos el PID de la shell desde una variable especial $$a SHELLPID, que luego puede ser utilizada por awk en la subshell de la tubería. Esencialmente, solo estamos enumerando los procesos en forma NOMBRE, PID, PID principal y filtramos solo aquellos que tienen el PID apropiado en la última columna.

Sergiy Kolodyazhnyy
fuente
1

Si inició algún proceso en la terminal (por ejemplo, gedit), el ID de proceso (PID) (de bash) y el ID de proceso primario (PPID) (de gedit) para estos dos procesos serán los mismos. Esto se puede ver en la salida de

ps -ef

mando. Para hacerlo más legible, primero "canalice" la salida para grepencontrar el PID de todos los procesos "bash" que se están ejecutando actualmente y luego "canalizar" nuevamente awk. Los awkselecciona sólo el PID y campos de nombre de proceso (campo 2 y 8) y salidas a la pantalla.

ps -ef | grep bash | awk '{print $2 ": " $8}'

El número en la salida es PID. Lo usará para encontrar qué proceso se inició en la terminal que tiene ese PID. Tenga en cuenta que puede haber más de una línea de salida si tiene más de un terminal abierto. Ahora, para encontrar los procesos "secundarios" (si los hay) de esas sesiones de terminal, podemos usar este comando:

ps -ef | awk '{if ($3 == EnterPID) print $2 ": " $8;}'

Debe ingresar el número PID en lugar de EnterPID en el último comando. Si hay más de un PID para "bash", debe probarlos todos.

El último comando solo busca el resultado ps -efy busca si PID (que ha encontrado en el comando anterior) y PPID son los mismos para cualquier proceso.

Más información:

hombre ps

hombre awk

Modelo no estándar
fuente
-1

Puedes usar htop. En Ubuntu 16.04 (y superior), puede instalarlo simplemente escribiendo sudo apt-get install htop.

También puedes usar top.

Rangerix
fuente
¿Y cómo identificaría los procesos en el terminal actual utilizando htop?
muru