linux - info - obtener pid en shell(bash)
process name linux (4)
- Los paréntesis invocan una subshell en Bash . Como es solo una subcapa, puede tener el mismo PID, depende de la implementación.
- 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.
-
$$
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:
- 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é ...
- cuando uso mi programa para mostrar pid entre paréntesis, el pid que muestra es diferente, ¿correcto?
- 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