name info about linux bash shell pid

linux - info - obtener pid en shell(bash)



process name linux (4)

  1. Los paréntesis invocan una subshell en Bash . Como es solo una subcapa, puede tener el mismo PID, depende de la implementación.
  2. El programa C que usted invoca es un proceso separado, que tiene su propio PID único, no importa si está en una subcaja o no.
  3. $$ es un alias en Bash para el PID actual del script . Vea las diferencias entre $$ y $BASHPID aquí , y justo encima de la variable adicional $BASH_SUBSHELL que contiene el nivel de anidación.

Tengo un problema con Bash, y no sé por qué.
Bajo caparazón, entro:

echo $$ ## print 2433 (echo $$) ## also print 2433 (./getpid) ## print 2602

"getpid" es un programa C para obtener el pid actual, como:

int main() { printf("%d", (int)getpid()); return 0; }

Lo que me confunde es que:

  1. Creo que "(comando)" es un subproceso (¿estoy en lo cierto?), Y creo que su PID debe ser diferente con su PID padre, pero son lo mismo, ¿por qué ...
  2. cuando uso mi programa para mostrar pid entre paréntesis, el pid que muestra es diferente, ¿correcto?
  3. es ''$$'' algo así como macro?

¿Me puedes ayudar?


Pruebe getppid() si desea que su programa C imprima el PID de su shell.


Puedes usar uno de los siguientes.

  • $! es el PID del último proceso de fondo.
  • kill -0 $PID comprueba si todavía se está ejecutando.
  • $$ es el PID del shell actual.

$$ se define para devolver el ID del proceso del padre en una subcategoría; de la página man en "Parámetros especiales":

$ Se expande al ID del proceso del shell. En una sub-shell (), se expande a la ID del proceso del shell actual, no de la subshell.

En bash 4, puede obtener la identificación del proceso del niño con BASHPID .

~ $ echo $$ 17601 ~ $ ( echo $$; echo $BASHPID ) 17601 17634