[eside-ghost] De bash, subshells y PIDs

Alvaro Uría fermat en rigel.deusto.es
Mie Feb 6 19:14:27 CET 2008


Aupi,

El 06/02/08 17:11, Arkaitz escribió:
> Enas,
> Estaba hoy peleandome con un bash script cuando he llegado a la siguiente
> situacion.
> Si lanzamos una subshell en background:
> $( sleep 300;echo "feo">subshell.log )&

¿Por qué pones el DOLAR inicial? (¿Para que devuelva algo?)

> Las variables de bash no sirven pues no se alteran en los subshells, con lo
> que $$ y $PPID son iguales tanto en el script como en la subshell.
> Puedo grepear ps y sacar el proceso de los que yo quiero con PID mas alto y
> sera ese, pero no lo quiero hacer asi, o al menos si lo puedo hacer de otra
> manera pos mas mejor.
> 
> Alguna idea?

No sé lo que querrás hacer, pero igual te sirve un script tipo el que
preguntaba Saúl, pero usando "wait" "y todo".
->>>>>>>>>>
PID=$$
PIDS=

function informa
  {
    echo Profundidad: $BASH_SUBSHELL
  }

informa
(informa;sleep 9; kill -1 $PID 2>/dev/null) &
(informa;sleep 5;echo Hijo1) & PIDS="$PIDS $!"
(informa;sleep 10;echo Hijo2) & PIDS="$PIDS $!"
trap "echo HUP;kill $PIDS 2>/dev/null" 1
echo Esperando hijos: $PIDS
wait $PIDS
echo exit
<<<<<<<<<<-

Nota: Esta vez, no se espera hasta el final de la "sleep" porque la
señal enviada es SIGTERM y no SIGALRM O:-D (la movida es que esa primera
subshell queda en background y ejecutará esa "kill" al vacío, si todo lo
anterior acaba antes)

Espero que te sirva.

Saludos,
  Alvaro Uría

------------ próxima parte ------------
Se ha borrado un mensaje que no está en formato texto plano...
Nombre     : signature.asc
Tipo       : application/pgp-signature
Tamaño     : 252 bytes
Descripción: OpenPGP digital signature
Url        : https://listas.deusto.es/mailman/private/eside-ghost/attachments/20080206/ceaa0365/signature.bin


Más información sobre la lista de distribución eside-ghost