Cómo obtener una lista de programas que se ejecutan con nohup

81

Estoy accediendo a un servidor que ejecuta CentOS (distribución de Linux) con una conexión SSH. Como no siempre puedo permanecer conectado, utilizo "nohup [comando] &" para ejecutar mis programas.

No pude encontrar cómo obtener una lista de todos los programas que comencé a usar nohup. "trabajos" sólo funciona antes de cerrar la sesión. Después de eso, si vuelvo a iniciar sesión, el comando de trabajos no me muestra nada, pero puedo ver en mis archivos de registro que mis programas aún se están ejecutando.

¿Hay alguna manera de obtener una lista de todos los programas que comencé a usar "nohup"?

Nils De Winter
fuente
Encontré un excelente artículo que puede ayudar con la pregunta: cyberciti.biz/faq/… . Más importante aún, es útil si puede interpretar la salida del comando ps, especialmente la columna de estadísticas. Si no lo hace, lea el artículo AHORA ;-)
jumping_monkey

Respuestas:

115

Cuando comencé con $ nohup storm dev-zookeper,

METHOD1: usando jobs,

prayagupd@prayagupd:/home/vmfest# jobs -l
[1]+ 11129 Running                 nohup ~/bin/storm/bin/storm dev-zookeeper &

METHOD2: usando el pscomando.

$ ps xw
PID  TTY      STAT   TIME COMMAND
1031 tty1     Ss+    0:00 /sbin/getty -8 38400 tty1
10582 ?        S      0:01 [kworker/0:0]
10826 ?        Sl     0:18 java -server -Dstorm.options= -Dstorm.home=/root/bin/storm -Djava.library.path=/usr/local/lib:/opt/local/lib:/usr/lib -Dsto
10853 ?        Ss     0:00 sshd: vmfest [priv] 

Columna TTY con ?=> nohupprogramas en ejecución.

Descripción

  • Columna TTY = la terminal asociada con el proceso
  • Columna STAT = estado de un proceso
    • S = sueño interrumpible (esperando a que se complete un evento)
    • l = es multiproceso (usando CLONE_THREAD, como lo hacen los pthreads NPTL)

Referencia

$ man ps # luego busca /PROCESS STATE CODES

prayagupd
fuente
5
El método 2 no enumera los programas con los que se iniciónohup . Enumera los procesos que no están conectados a un TTY, que es algo completamente diferente: los procesos que se inician con nohuppermanecen conectados a su TTY principal hasta que se cierra; los procesos que no están conectados a un TTY no necesariamente se iniciaron nohup. Es decir, el método 2 enumera, entre otros procesos, algunos de los programas que se ejecutan con nohup.
Arcturus B
4
los trabajos no funcionan para mí, solo funcionan para una misma sesión ssh, si me desconecto y me conecto de nuevo, ya no aparece el proceso nohup en ejecución enumerado anteriormente
Mojimi
29

En lugar de nohup, deberías usar screen. Obtiene el mismo resultado: sus comandos se ejecutan "separados". Sin embargo, puede reanudar las sesiones de pantalla y volver a su terminal "oculta" y ver el progreso reciente dentro de ese terminal.

screentiene muchas opciones. La mayoría de las veces utilizo estos:

Para iniciar la primera sesión de pantalla o tomar el control de la más reciente separada:

screen -Rd 

Para desconectarse de la sesión actual: Ctrl+ACtrl+D

También puede iniciar varias pantallas: lea los documentos.

mvp
fuente
6
Me parece una buena alternativa. También descubrí que podía encontrar los PID con "ps auwx"
Nils De Winter
7
La pregunta pregunta claramente ¿Hay alguna manera de obtener una lista de todos los programas que comencé a usar "nohup"? , sin embargo, esta respuesta ni siquiera aborda ligeramente la pregunta. ¿Por qué se acepta?
Luke Joshua Park
3
Porque en 2013, fue la única respuesta que ayudó.
Nils De Winter
21

Si tiene un redireccionamiento de salida estándar a "nohup.out", vea quién usa este archivo

lsof | grep nohup.out
Victor Melnikov
fuente
1
Esa es una forma inteligente. Pero en mi caso, esto no arroja resultados. Aunque estoy seguro de que el comando nohup todavía se está ejecutando y está usando el archivo nohup.out.
Julius Š.
1
Está bien en todos los TTY, pero muestra un proceso doble para cada nohup.
Nabi KAZ
@ NabiK.AZ de man lsof: "En general, los subprocesos y las tareas heredan los archivos de la persona que llama, pero pueden cerrar algunos y abrir otros, por lo que lsof siempre informa todos los archivos abiertos de subprocesos y tareas". No pude encontrar información sobre nohup en su hombre, pero parece que usa dos hilos, no uno.
Yaroslav Nikitenko
6

No puede obtener exactamente una lista de comandos con los que se comienza, nohuppero puede verlos junto con sus otros procesos usando el comando ps x. Los comandos que comienzan con nohuptendrán un signo de interrogación en la columna TTY.

Viejo Pro
fuente
3
"ps x" no ayudó, pero descubrí que "ps auxw" sí.
Nils De Winter
5

También puede usar el comando superior y su ID de usuario indicará los trabajos que se están ejecutando y sus horas.

$ top

(esto mostrará todos los trabajos en ejecución)

$ top -U [user ID]

(Esto mostrará los trabajos que son específicos para el ID de usuario)

Jcrow06
fuente
Además, el bueno de esto es que se mantiene en su consola para que pueda ver el trabajo y saber cuando termina
rgilligan