¿Cómo puedo saber si un proceso se está ejecutando en segundo plano o en primer plano en la salida del comando "ps" o "ps -ef"?

¿Cómo puedo saber si un proceso se está ejecutando en segundo plano o en primer plano en la salida del comando "ps" o "ps -ef"?

¿Cómo puedo saber si un proceso se está ejecutando en segundo plano o en primer plano en comandos pso 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 jobsno se utiliza aquí.

Respuesta1

El statcampotiene 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 pscomo elestadodel proceso. man psenumera estosestados del procesobajo el título de PROCESS STATE CODE.

ps -efno informa el estado del proceso, pero al referirnos a, man psencontramos en la OUTPUT FORMAT CONTROLsección que el -oargumento se puede usar para especificar la salida de psuno o máspalabras clave. Estospalabras clavese enumeran en la STANDARD FORMAT SPECIFIERSsección y, con extraordinaria persistencia, eventualmente se encontrarán las palabras clave s, staty stateenumeradas. 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:psfavorece al usuario diligente.

Como ejemplo, el siguiente pscomando generará elPID, elestado, y eldominioque inició el proceso utilizando elpalabras clave pid, staty 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 es12518
  • el procesoestadoes S+(a través de palabra clave stat)
  • lo commandque 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 psel 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 Sen 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).

información relacionada