¿Cómo puedo saber si un proceso se está ejecutando en segundo plano o en primer plano en comandos ps
o ps -ef
?
Primero pensé que cuando escribo ps -ef
, hay una sección llamada TTY. Cuando miro la lista de TTY, la mayoría de ellos lo son ?
. Me pregunto si ese signo de interrogación significa que el proceso se ejecuta en segundo plano.
¡Quiero comprobar si tengo razón! Si no, quiero saber cómo puedo saber si el proceso se está ejecutando en segundo plano o en primer plano.
PD. El comando jobs
no se utiliza aquí.
Respuesta1
El stat
campotiene un extra +
para procesos en primer plano:
ps -e -o pid,tty,stat,cmd
Los procesos en primer plano son aquellos cuyo id de grupo de procesos ( pgid
) es el de primer plano en la terminal ( tpgid
):
ps -e -o pid,pgid,tpgid,tty,cmd | awk '$2==$3'
Cuando miro la lista de TTY, la mayoría de ellos son '?' (signos de interrogación) Me pregunto si ese signo de interrogación significa que el proceso se ejecuta en segundo plano.
No, eso significa que no tienen ningún tty controlador (demonios o subprocesos del núcleo, ni en primer plano ni en segundo plano). Para una lista defondoprocesos:
ps -e -o pid,pgid,tpgid,tty,cmd | awk '$3!=-1 && $2!=$3'
Respuesta2
El OP preguntó: "... ¿cómo puedo saber si el proceso se está ejecutando en segundo plano o en primer plano?"
El estado de primer plano y de fondo de unaprocesoson reportados ps
como elestadodel proceso. man ps
enumera estosestados del procesobajo el título de PROCESS STATE CODE
.
ps -ef
no informa el estado del proceso, pero al referirnos a, man ps
encontramos en la OUTPUT FORMAT CONTROL
sección que el -o
argumento se puede usar para especificar la salida de ps
uno o máspalabras clave. Estospalabras clavese enumeran en la STANDARD FORMAT SPECIFIERS
sección y, con extraordinaria persistencia, eventualmente se encontrarán las palabras clave s
, stat
y state
enumeradas. Pero tenga en cuenta que si bien los trespalabras claveproporcionaráestadoen la salida, sólo elstat
palabra clavele dará el multi-character process state
! La comida para llevar:ps
favorece al usuario diligente.
Como ejemplo, el siguiente ps
comando generará elPID, elestado, y eldominioque inició el proceso utilizando elpalabras clave pid
, stat
y command
:
ps -eo pid,stat,command
Para ver cómo funciona esto, considere este ejemplo:
En una terminal, ejecute este comando:
ping 8.8.8.8 > /dev/null
En otra terminal:
ps -eo pid,stat,command | grep ping | grep -v grep
12518 S+ ping 8.8.8.8
Lo que nos informa:
- el PID es
12518
- el procesoestadoes
S+
(a través de palabra clavestat
) - lo
command
que generó el proceso fueping 8.8.8.8
Se requiere un paso más para saber si este proceso es en primer plano o en segundo plano: elestadovalor de S+
debe serdescifradobajo man ps
el título de PROCESS STATE CODE
- que nos dice:
S suspensión interrumpible (esperando a que se complete un evento)
+ está en el grupo de procesos de primer plano
En consecuencia, vemos en la +
posición del segundo carácter que este proceso se está ejecutando en elprimer plano. Un proceso en segundo plano puede aparecer con un S
en la posición del primer carácter y nada en la segunda posición. Hay varias otras combinaciones de caracteres que indican un proceso en segundo plano; verestepara un listado.
FWIW:Esto funciona en mi sistema basado en Debian (reportado como versión ps from procps-ng 3.3.15
) y en macOS 10.15 (que desciende de la versión BSD de ps
).