GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo iniciar un proceso en su propio grupo de procesos?

¿Qué quiere decir con "iniciar un proceso en su propio grupo de procesos"? El shell inicia procesos en sus propios grupos de procesos, así es como controla el trabajo (al tener un grupo de procesos para los procesos en primer plano y varios grupos de procesos para cada canalización iniciada en segundo plano).

Para ver que el shell lanza un nuevo grupo de procesos para cada tubería, puede hacer esto:

ps fax -o pid,pgid,cmd | less

que mostrará algo como:

11816 11816  |   \_ /bin/bash
4759   4759  |       \_ ps fax -o pid,pgid,cmd
4760   4759  |       \_ less

Tenga en cuenta que el shell ha creado un nuevo grupo de procesos para la canalización y todos los procesos de la canalización comparten el grupo de procesos.

Editar:

Creo que sé a lo que te refieres. Estás llamando a system de Perl. Aparentemente, sh -c no crea nuevos grupos de procesos, ya que es un shell sin control de trabajos.

Lo que haría sería fork , luego en el niño:

setpgrp;
system("ps fax -o pid,pgid,cmd");

y wait en el padre.


EDITAR:si lo que quería hacer era usar setsid pero encontrar la identificación de la sesión y/o el pid del proceso resultante:

Si inicia un proceso a través del comando setsid, no se adjuntará a su terminal, por lo que, por supuesto, no responderá a ctrl-c.

Puede encontrarlo haciendo grepping a través de la salida de

ps x -O sid 

o algo más limitado como

ps x -o %c,%p,sid

O simplemente trolear a través de proc/[pid]/stat para todas las entradas y mirar la identificación de la sesión y cualquier otra cosa que sea de interés (ver man proc para más detalles)

La página de manual para setsid no proporciona ningún indicador para generar directamente la salida, pero puede hacer su propia versión de forma trivial que imprima la información deseada, modificando el estándar.

Por ejemplo, tome una copia de setsid.c de uno de los resultados para

http://www.google.com/codesearch?as_q=setsid&as_package=util-linux

Comente la inclusión de nls, las cosas de configuración regional y la macro de error _("") que causará problemas y luego agregue esto justo antes de la línea execvp:

    printf("process will be pid %d sid %d\n", getpid(), getsid(0));

Linux
  1. Cómo instalar vtop en Linux

  2. ¿Cómo un proceso en segundo plano conoce su propio Pid?

  3. ¿Cómo matar un proceso con una frase en su nombre?

  4. ¿Cómo obtener ps para imprimir grupo?

  5. ¿Cómo comprimir varias carpetas, cada una en su propio archivo zip?

Cómo matar un proceso en Linux

Cómo agregar un usuario a un grupo en Linux

Cómo enumerar grupos en Linux

Cómo iniciar y finalizar un proceso en Ubuntu 20.04 LTS

Cómo encontrar el nombre del proceso a partir de su PID

Si conozco el número PID de un proceso, ¿cómo puedo obtener su nombre?