Article View: es.comp.os.linux.programacion
Article #1049Re: señales
From: AnimAlf
Date: Thu, 20 Apr 2006 13:01
Date: Thu, 20 Apr 2006 13:01
130 lines
5752 bytes
5752 bytes
--=-GnpO9VW12DhQQndWX25E
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
El dj 20 de 04 del 2006 a les 08:31 +0000, en/na J.A. Gutierrez va
escriure:=20
> AnimAlf <AnimAlf@engendro.sytes.net> wrote:
> : Creia que le enviaba SIGTERM a todas las aplicaciones pero veo que no e=
s
>=20
> normalmente (aunque puede depender del gestor de sesiones
> que se use) al finalizar una sesion X no se mandan se~nales
> a los clientes X abiertos. Asi pues, p.e. un xterm terminara
> diciendo:
>=20
> xterm: fatal IO error 131 (Connection reset by peer) or KillClient on X =
server ":1.0"
> =09
> Es decir, que xterm detecta la situacion y si que manda una
> se~nal a su hijo (el shell), que a su vez manda la se~nal
> estandar en estos casos a sus hijos (SIGHUP).
>=20
> Lo acabo de verificar con vnc y el script efectivamente recibe
> y captura la se~nal "1" (SIGHUP)
>=20
> Si en tu caso no te lo captura supongo que tendras que capturar
> todas y ver cual es la que recibes.
Si, eso voy a hacer. Con todas=20
perl -e 'print "$_\t" for sort keys(%SIG);
Me ocurre que el script no est=C3=A1 destinado a la terminal, al trabajar c=
on
=C3=A9l mientras lo escribia estaba bajo ella. Pero su destino no es ser
arrancado desde la terminal. (en la teminal s=C3=AD me captura la se=C3=B1a=
l)
Puede que me haya hecho un lio. Estoy empezando con esto, antes nunca
hab=C3=ADa hecho nada as=C3=AD.
Puede que est=C3=A9 haciendo algo incorrecto o ilegal. El script trabaja co=
n
hijos, de los hijos no se nada hasta que terminan su ejecuci=C3=B3n y
regresan ya que llaman a una exec. El id del proceso hijo lo guardo en
el proceso padre. Una cosa as=C3=AD: (funciona correctamente y hace lo que
tiene que hacer si se interrumpe la llamada), pero he pensado lo de la
instrucci=C3=B3n ilegal al hacer la llamada KILLTERM a los hijos dentro de
finalizar, no se.
$refApp es un idenfificador =C3=BAnico por aplicaci=C3=B3n que est=C3=A1n e=
n @appList
%config contiene:
$refApp . 'Pid' donde se asigna el pid del hijo
$refApp . 'App' Path completo a la aplicaci=C3=B3n
Tras el exec hago la la asignaci=C3=B3n del pid con el id =C3=BAnico de la
aplicaci=C3=B3n
extAppStatus: lanza los procesos
finalHijo: respuesta hijos excepto si entra en finalizar.
finalizar: la rutina final
sub extAppStatus {
my ($refApp) =3D @_;
$config->{ $refApp . 'Pid'} =3D fork()=20
unless ($config->{ $refApp . 'Pid'});
if ( $config->{$refApp . 'Pid'} =3D=3D 0) {
$SIG{QUIT} =3D $SIG{HUP} =3D $SIG{INT} =3D 'DEFAULT';
exec ($config->{$refApp . 'App'});
} else {exit -1}
} else {
# Asigno una clave en la configuraci=C3=B3n
# con el idenficador del padre lanzador.
$config->{$config->{$refApp . 'Pid'}} =3D=20
$refApp unless $config->{$config->{$refApp . 'Pid'}};
# a ejecutar por el proceso padre
}
}
# Los procesos hijo env=C3=ADan esta se=C3=B1al al padre cuando terminan
sub finalHijo {
$SIG{CHLD} =3D \&finalHijo;
my $pid =3D wait;
return unless $config->{$pid};
undef $config->{$config->{$pid} . 'Pid'}
if defined $config->{$config->{$pid} . 'Pid'};
undef $config->{$pid} if defined $config->{$pid};
}
$SIG{CHLD} =3D \&finalHijo;
sub finalizar {
$SIG{QUIT} =3D $SIG{HUP} =3D $SIG{INT} =3D \&finalizar;
Gtk2->main_quit;
#Comprobar que no quede ninguna aplicaci=C3=B3n
# hijo en funcionamiento
$SIG{CHLD} =3D 'DEFAULT';
foreach my $app (@appList) {
if (defined $config->{$app . "Pid"}){
kill ('SIGTERM', $config->{$app . "Pid"});
waitpid($config->{$app . "Pid"}, 0)=20
if defined $config->{$app . "Pid"};
}
}
# borrar archivo de bloqueo
unlink $apppid or die "No puedo eliminar bloqueo $apppid";
}
$SIG{QUIT} =3D $SIG{HUP} =3D $SIG{INT} =3D \&finalizar;
el c=C3=B3digo completo est=C3=A1 aqu=C3=AD:
http://forum.amule.org/thread.php?sid=3D&postid=3D53706#post53706
S=C3=B3lo me queda esto para dejar finalizado el script
--=-GnpO9VW12DhQQndWX25E
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: =?ISO-8859-1?Q?Aix=F2?= =?ISO-8859-1?Q?_=E9s?= una part
d'un missatge, signada digitalment
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.2 (GNU/Linux)
iQCVAwUAREeGDR535IyztBIVAQLrKQP/c4NBCMm5N0+yc3timASDCo0avAcCqnI2
Vvj1BJ84Jk7pCzKz3ZlE4RPbmCGXGML65YRJjpjVRs+3k2n/wjdaLzmNIJnaKYO/
Ptga7OTRKxuXSKhgKvOzqRbQgcjwDMhHm/iWmyo2tOnmItalVhrhoUEnbdmfbBpz
on1aYEtV1O4=
=WHQH
-----END PGP SIGNATURE-----
--=-GnpO9VW12DhQQndWX25E--
Technical Details
Message-ID:
<1145538061.27924.0.camel@general.engendro.sytes.net>Path:
arc1-ca.pugleaf.net!g2news2.google.com!news3.google.com!news2.google.com!fu-berlin.de!nsnmpen1-lo.nuria.telefonica-data.net!telenews.teleline.es!not-for-mailReferences:
<1145457998.20049.12.camel@general.engendro.sytes.net> <e27gsp$7ds$1@appleseed.escomposlinux.org>Show Full Headers
Complete Article Headers
X-Google-Thread: f86c8,53ddbc52f9b07e3 X-Google-Attributes: gidf86c8,public X-Google-Language: SPANISH,UTF8 Path: arc1-ca.pugleaf.net!g2news2.google.com!news3.google.com!news2.google.com!fu-berlin.de!nsnmpen1-lo.nuria.telefonica-data.net!telenews.teleline.es!not-for-mail X-Trace-PostClient-IP: 80.32.76.249 Newsgroups: es.comp.os.linux.programacion Subject: Re: señales From: AnimAlf <AnimAlf@engendro.sytes.net> In-Reply-To: <e27gsp$7ds$1@appleseed.escomposlinux.org> References: <1145457998.20049.12.camel@general.engendro.sytes.net> <e27gsp$7ds$1@appleseed.escomposlinux.org> Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-GnpO9VW12DhQQndWX25E" Organization: Is the truth out there? Message-ID: <1145538061.27924.0.camel@general.engendro.sytes.net> Mime-Version: 1.0 X-Mailer: Evolution 2.4.2.1 Lines: 131 Date: Thu, 20 Apr 2006 13:01:02 GMT NNTP-Posting-Host: 10.20.31.4 X-Complaints-To: usenet@teleline.es X-Trace: telenews.teleline.es 1145538062 10.20.31.4 (Thu, 20 Apr 2006 15:01:02 MET DST) NNTP-Posting-Date: Thu, 20 Apr 2006 15:01:02 MET DST