2010-01-08 11 views
9

Soy principiante en la programación de bash shell. ¿Me puede decir acerca de los símbolos '$$' en el shell bash?

Si trato de la siguiente

#> echo $$ 

imprime

#>18756 

¿Me puede decir lo que este símbolo se utiliza para y cuando?

+0

¿Qué ha pasado con la buena vieja tradición de leer el fino manual de su caparazón? – Jens

Respuesta

16

Es la identificación del proceso del proceso bash en sí.

Es posible utilizarlo para realizar un seguimiento de su proceso de largo de su vida - utilizar ps -p para ver si todavía está funcionando, lo envía una señal utilizando kill (para hacer una pausa en el proceso, por ejemplo), cambiar su prioridad con renice, y así sucesivamente.

Las identificaciones de proceso a menudo se escriben en archivos de registro, especialmente cuando se ejecutan varias instancias de un script a la vez, para ayudar a rastrear el rendimiento o diagnosticar problemas.

Aquí está the bash documentation que describe parámetros especiales.

BASHPID, mencionado por ghostdog74, se agregó a la versión 4.0. He aquí un ejemplo de Mendel Cooper Advanced Bash-Scripting Guide que muestra la diferencia entre $$ y $BASHPID:

#!/bin/bash4 

echo "\$\$ outside of subshell = $$" # 9602 
echo "\$BASH_SUBSHELL outside of subshell = $BASH_SUBSHELL" # 0 
echo "\$BASHPID outside of subshell = $BASHPID" # 9602 
echo 

(echo "\$\$ inside of subshell = $$" # 9602 
echo "\$BASH_SUBSHELL inside of subshell = $BASH_SUBSHELL" # 1 
echo "\$BASHPID inside of subshell = $BASHPID") # 9603 
# Note that $$ returns PID of parent process. 
+0

O puede vincular directamente a la documentación oficial de Bash: http://www.gnu.org/software/bash/manual/bashref.html#Special-Parameters http://www.gnu.org/software/bash/manual /bashref.html#Shell- Variables – ephemient

+1

Buena idea, hecho, gracias. –

1

si tiene bash, un relativamente cerca equivalente es la variable BASHPID. Ver hombre bash

BASHPID 
     Expands to the process id of the current bash process. This differs from $$ under certain circumstances, such as subshells 
     that do not require bash to be re-initialized. 
Cuestiones relacionadas