Tengo un problema con Bash y no sé por qué.
Debajo de la concha, entro:
echo $$ ## print 2433
(echo $$) ## also print 2433
(./getpid) ## print 2602
"getpid" es un programa en C para obtener pid actual, como:
int main() { printf("%d", (int)getpid()); return 0; }
Lo que me confunde es que:
- Creo que "(comando)" es un subproceso (¿estoy en lo cierto?), Y creo que su pid debería ser diferente con su padre pid, pero son lo mismo, por qué ...
- cuando uso mi programa para mostrar pid entre paréntesis, el pid que muestra es diferente, ¿es correcto?
- ¿Es '$$' algo así como macro?
¿Me puedes ayudar?
echo $$ $BASHPID ; ( echo $$ $BASHPID )
demuestra que sí. Los corchetes crean una subshell. Las declaraciones pueden cambiar los valores de las variables y el shell principal no debe ver esos cambios. Esto se implementa como una fork()
operación.
getpid
mostraría una ID de proceso diferente incluso si no se ejecutara en una subshell.