GNU/Linux >> Tutoriales Linux >  >> Linux

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

Estoy usando bash en un sistema RH Linux.

Normalmente, puede obtener su propio PID con la variable $$. Sin embargo, si un script ejecuta una de sus propias funciones como un proceso en segundo plano, eso no funciona; todas las funciones que se ejecuten en segundo plano obtendrán el PID del script principal cuando se use $$.

Por ejemplo, aquí hay un script de prueba:

    /tmp/test:
    #!/bin/bash
    echo "I am $$"
    function proce {
      sleep 3
      echo "$1 :: $$"
    }

    for x in aa bb cc; do
      eval "proce $x &"
      echo "Started: $!"
    done

Cuando se ejecuta:

    /tmp$ ./test
    I am 5253
    Started: 5254
    Started: 5256
    Started: 5258
    /tmp$ aa :: 5253
    bb :: 5253
    cc :: 5253

Entonces, el script principal (/tmp/test) se ejecuta como PID 5253 y activa tres procesos en segundo plano con PID 5254, 5256 y 5258. Pero cada uno de esos procesos en segundo plano obtiene el valor 5253 con $$.

¿Cómo pueden estos procesos descubrir su PID real?

Respuesta aceptada:

$BASHPID puede ser lo que estás buscando.

BASHPID

Se expande al ID de proceso del proceso Bash actual. Esto difiere de $$ en ciertas circunstancias, como subcapas que
no requieren que Bash se reinicie.

A diferencia de $$

($$) Se expande al ID de proceso del shell. En un () subshell,
se expande al ID de proceso del shell que invoca, no al subshell.

http://www.gnu.org/software/bash/manual/bashref.html#Bash-Variables


Linux
  1. ¿No se puede eliminar el proceso de Gedit desde su Pid?

  2. ¿Cómo suspender y poner en primer plano un proceso en segundo plano?

  3. ¿Cómo identificar un proceso que no tiene Pid?

  4. Cómo ejecutar el proceso Rsync en segundo plano

  5. ¿Cómo obtener el ID de proceso del proceso en segundo plano?

Cómo encontrar un nombre de proceso usando el número PID en Linux

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

Cómo encontrar el PID y PPID de un proceso en Linux

Cómo enviar procesos a segundo plano en Linux

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

Cómo obtener pid del proceso recién iniciado