Thread View: es.comp.os.linux.programacion
9 messages
9 total messages
Started by AnimAlf
Wed, 19 Apr 2006 14:46
señales
Author: AnimAlf
Date: Wed, 19 Apr 2006 14:46
Date: Wed, 19 Apr 2006 14:46
42 lines
2245 bytes
2245 bytes
--=-8P5dAe4QD8OvrHid0Dxb
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
hola,
he echo un script en perl y me gustar=C3=ADa que al finalizar una sesion de
las X atendiera a la se=C3=B1al para borrar el archivo de bloqueo, pero no =
se
de que se=C3=B1al se trata, ahora utilizo estas:
$SIG{'HUP'} =3D \&finalizar; # Si la xterm se cierra
$SIG{'INT'} =3D \&finalizar; # Si se pulsa Ctrl - C
$SIG{'TERM'} =3D \&finalizar; # Cre=C3=ADa que era esta.
...
...
sub finalizar {
# guardar y borrar bloqueo
...
}
Creia que le enviaba SIGTERM a todas las aplicaciones pero veo que no es
as=C3=AD. =C2=BFQu=C3=A9 se=C3=B1al puedo utilizar si se est=C3=A1 cerrando=
una sesi=C3=B3n de X?
--=-8P5dAe4QD8OvrHid0Dxb
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)
iQCVAwUAREZNTh535IyztBIVAQIVugP/ZxgBsamlOvS21wWTgWwnsBwVJMEUKXPz
hLzfOtv/io0dqCzXbmxjX8e/ZiUdPmylJDwl2YuFC22GRLQgDz8ahj2676eQbNfB
p6PxA0f4xAZFb/639sXEq9Q0FhRiZWnc+Lv83ONJvhYemFlSqiCkld1y0B2WdEzo
YqHDjIStjSI=
=PVCF
-----END PGP SIGNATURE-----
--=-8P5dAe4QD8OvrHid0Dxb--
Re: señales
Author: J.A. Gutierrez
Date: Thu, 20 Apr 2006 08:31
Date: Thu, 20 Apr 2006 08:31
34 lines
2241 bytes
2241 bytes
AnimAlf <AnimAlf@engendro.sytes.net> wrote:
: $SIG{'HUP'} =3D \&finalizar; # Si la xterm se cierra
: $SIG{'INT'} =3D \&finalizar; # Si se pulsa Ctrl - C
: $SIG{'TERM'} =3D \&finalizar; # Cre=C3=ADa que era esta.
: ...
: Creia que le enviaba SIGTERM a todas las aplicaciones pero veo que no es
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:
xterm: fatal IO error 131 (Connection reset by peer) or KillClient on X server ":1.0"
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).
Lo acabo de verificar con vnc y el script efectivamente recibe
y captura la se~nal "1" (SIGHUP)
Si en tu caso no te lo captura supongo que tendras que capturar
todas y ver cual es la que recibes.
Por cierto, tambien te puede interesar capturar SIGPIPE
--
PGP and other useless info at \
http://webdiis.unizar.es/~spd/ \
finger://daphne.cps.unizar.es/spd \ Timeo Danaos et dona ferentes
ftp://ivo.cps.unizar.es/pub/ \ (Virgilio)
Re: señales
Author: 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--
Re: señales
Author: AnimAlf
Date: Thu, 20 Apr 2006 13:12
Date: Thu, 20 Apr 2006 13:12
26 lines
1986 bytes
1986 bytes
--=-4K24CWuWyFSd4bgw+5E6
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable
El dj 20 de 04 del 2006 a les 13:01 +0000, en/na AnimAlf va escriure:
> } else {exit -1}
Esto sobra O:)) se me ha colado
--=-4K24CWuWyFSd4bgw+5E6
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)
iQCVAwUAREeIzh535IyztBIVAQIN9wP+JTSe6StizCRTstIAxSuXgIaUWZjrucpr
qAHz8ZL3CVdncKdfmJuQmk/TIv7mXSlSzWgSueTS67MB7+oaRIhZmTGVOXeAWR3B
9xEbty1zgW2FCplWxVCGwlUrHs02UDxB0iLUw4O//QJhAdcR6g35UFNGXW2Tz/AE
ynlGtwVSttc=
=q91/
-----END PGP SIGNATURE-----
--=-4K24CWuWyFSd4bgw+5E6--
Re: señales
Author: AnimAlf
Date: Thu, 20 Apr 2006 16:27
Date: Thu, 20 Apr 2006 16:27
34 lines
2365 bytes
2365 bytes
--=-0Rltnf4dpCxQaibGQDZs 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: > normalmente (aunque puede depender del gestor de sesiones > que se use) al finalizar una sesion X no se mandan se=C3=B1ales > a los clientes X abiertos. :((=20 lo he probado con todas y es cierto. No les manda nada a lo que pueda responder :(( =C2=BFC=C3=B3mo puedo detectar que termina una sesi=C3=B3n? --=-0Rltnf4dpCxQaibGQDZs 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) iQCVAwUAREe2ah535IyztBIVAQJoUwP/Umi/iO9H0pZNyvp3yCkNmaGPqRbyTtUw Hridwo+CrQdAWwVykORKy74SsUaKyctHyJF1GeqY2atD42wIvN8C5C8tSunTd9VS 2jZGLVx4vrWGPlLSq8u8pUAfNKqqWwP5J07a+dRniZnJ/AUe09wHsxXvzuuXDtF8 Wtu3Mha9Yds= =hPSB -----END PGP SIGNATURE----- --=-0Rltnf4dpCxQaibGQDZs--
Re: señales
Author: J.A. Gutierrez
Date: Fri, 21 Apr 2006 08:26
Date: Fri, 21 Apr 2006 08:26
28 lines
2042 bytes
2042 bytes
AnimAlf <AnimAlf@engendro.sytes.net> wrote: : lo he probado con todas y es cierto. No les manda nada a lo que pueda : responder :(( : =C2=BFC=C3=B3mo puedo detectar que termina una sesi=C3=B3n? Pues se me ocurren dos opciones a.- Tu programa abre una conexion X11. Al terminar la sesion se le cerrara y (no se muy bien por que mecanismo) las librerias de X11 te permitiran enterarte. b.- Estudias que mecanismo utiliza tu gestor de sesiones para terminar la sesion y a~nades ahi algo para que mate tu programa. p.e. en xdm, puedes poner algo asi como su $USER -c 'test -f $HOME/.ssh/.ssh_agent_pid && kill -TERM `cat $HOME/.ssh/.ssh_agent_pid` && rm $HOME/.ssh/.ssh_agent_pid' en el fichero Xreset -- PGP and other useless info at \ http://webdiis.unizar.es/~spd/ \ finger://daphne.cps.unizar.es/spd \ Timeo Danaos et dona ferentes ftp://ivo.cps.unizar.es/pub/ \ (Virgilio)
Re: señales
Author: AnimAlf
Date: Sat, 22 Apr 2006 16:12
Date: Sat, 22 Apr 2006 16:12
55 lines
3175 bytes
3175 bytes
--=-fLlM8/xTdFWATGuKfrgM Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable El dv 21 de 04 del 2006 a les 08:26 +0000, en/na J.A. Gutierrez va escriure:=20 > a.- Tu programa abre una conexion X11. Al terminar la sesion > se le cerrara y (no se muy bien por que mecanismo) las librerias > de X11 te permitiran enterarte. > b.- Estudias que mecanismo utiliza tu gestor de sesiones para > terminar la sesion y a~nades ahi algo para que mate tu programa. Lo seguir=C3=A9 buncando, no he encontrado nada en claro por ahora. En alg= =C3=BAn lugar tengo que encontrar-lo. El windows manager s=C3=AD que envia una se= =C3=B1al no estandar, que las aplicaciones gnome interceptan con el 'delete_event' o eso he creido entender (creo que no la env=C3=ADa al finalizar sesi=C3=B3n) seguir=C3=A9 con ello. > p.e. en xdm, puedes poner algo asi como >=20 > su $USER -c 'test -f $HOME/.ssh/.ssh_agent_pid && kill -TERM `cat $HOME/.= ssh/.ssh_agent_pid` && rm $HOME/.ssh/.ssh_agent_pid' >=20 > en el fichero Xreset interesante :)) como es para el bloqueo he salido del paso mandandole escribir el pid ($$) al principio del archivo. Pero si las aplicaciones tienen que guardar informaci=C3=B3n importante, cr= eo que ser=C3=ADa interesante encontrar ese momento, en el que poder guardar y salir correctamente antes del cierre forzado. --=-fLlM8/xTdFWATGuKfrgM 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) iQCVAwUAREpWAR535IyztBIVAQJMIAP/Y7OTvAxWMESOXwh4/tF0lehbbMWLfTST +BZnnlwDi9ACdHxytkj6Vh2fEDofqUquyBfp8an/MqH7jc+Lut6oOcztMSG63aKz AlFPWpP/7AJALl/AmisaLn/DLqlX4Z/bJZlJc9snIEBqds8cHPXnej1g3edq20F/ X7igSloCBas= =k27D -----END PGP SIGNATURE----- --=-fLlM8/xTdFWATGuKfrgM--
Re: señales
Author: David Serrano (Hue-Bond)
Date: Fri, 19 May 2006 02:22
Date: Fri, 19 May 2006 02:22
81 lines
3730 bytes
3730 bytes
J.A. Gutierrez, vie20060421@10:26:42(CEST):
> AnimAlf <AnimAlf@engendro.sytes.net> wrote:
>
Llego super tarde pero es que esto me interesaba y lo he ido dejando hasta
un Jueves aleatorio, o Viernes según se mire, a las 4 de la mañana.
>: =C2=BFC=C3=B3mo puedo detectar que termina una sesi=C3=B3n?
>
> Pues se me ocurren dos opciones
>
> a.- Tu programa abre una conexion X11. Al terminar la sesion
> se le cerrara y (no se muy bien por que mecanismo) las librerias
> de X11 te permitiran enterarte.
Me parece que su programa no abre una conexión X11 porque de ser así, él ya
sabría muy bien lo que pasa al cerrar las X. Si usa Gtk seguro que hay algo
de más alto nivel, y lo mismo con Tk o lo que sea. Así que partiendo de ahí
(su programa no se conecta a X), he hecho esta cosita:
-----------
#!/usr/bin/perl
use warnings;
use strict;
use Data::Dumper; ## prescindible
use IO::Select;
use X11::Protocol;
$|++; ## para mostrar debug y que aparezca ;)
my $X = X11::Protocol->new;
sub handle_event { ## en mis pruebas, nunca se ha llamado a esta función
my(%e) = @_;
print Dumper \%e;
}
for (keys %SIG) { ## cogemos todas las señales
$SIG{$_} = sub { print "got signal $_[0]\n"; }
}
$X->{'event_handler'} = \&handle_event;
my $fds = IO::Select->new($X->connection->fh);
while ($fds->can_read) { ## aquí el programa se bloquea
print "IO::Select can read\n";
$X->handle_input;
}
-----------
Lo ejecuto desde una xterm redirigiendo salida estándar a un archivo y
cierro las X. Desde la tty hago un cat al archivo y veo:
IO::Select can read
Así que aquí tenemos algo ya. Ahora, si esto es un falso positivo o no, ya
no lo sé. Dudo mucho que este programa reciba otros eventos, pero quizá el
suyo sí lo hace. Es notable que el programa sigue vivo, colgando de init. Ni
rastro de señales, según puede verse. Hasta que:
$ kill 26021
$ kill 26021
$ kill 26021
$ cat /tmp/x11-protocol
IO::Select can read
got signal TERM
got signal TERM
got signal TERM
$ kill -9 26021
$ kill -9 26021
-bash: kill: (26021) - No existe tal proceso
$ _
Animalf, espero que te sirva de algo. Ah, afortunadamente el módulo
X11::Protocol está empaquetado para Debian: libx11-protocol-perl. En mi
gentoo también lo veo: dev-perl/X11-Protocol. Si usas otra distro ya no sé.
--
David Serrano
Re: señales
Author: AnimAlf
Date: Fri, 19 May 2006 21:50
Date: Fri, 19 May 2006 21:50
53 lines
3369 bytes
3369 bytes
--=-kDBnMr/bRwUrJfQ43wxY Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Gracias Hue-Bond, lo estudiar=C3=A9. Al final dej=C3=A9 el script en perl terminado, no siendo as=C3=AD. Creyendo que acert=C3=A9, al escribir el pid= del programa al principio del archivo de bloqueo y si al principio detectaba que el archivo existia tambi=C3=A9n comprovaba el proceso. Pero todo y que = la idea era buena. En algo me equivoque. Pero olvid=C3=A9 las comprobaciones cuando ya todo estaba hecho :(( Un bala perdida como yo, de nuevo vuelve a tener curro, (tengo que mantener la cueva) he tenido suerte y es un curro que me gusta, pero me roba todo el tiempo y no voy a poder solucionarlo. Voy a estudiarlo, cuando tenga un momento. ... ahora los pocos momentos que me quedan son para un par de cervezas y la lectura, aveces s=C3=B3lo de pasada de los mensajes que inet me ofrece. Si te interesa entretenerte o a alguien le interesa. Echenle un vistazo al c=C3=B3digo en=20 http://forum.amule.org/thread.php?threadid=3D9751&sid=3D No se est=C3=A1 ah=C3=AD ... estamos ;)) yo estoy que puedo hacer y tambi=C3=A9n me gusta mucho, es conducir muchos kil=C3=B3metros y por supuesto mejorar aquello a lo que no llego, que es qu= e me entiendan en deuffglish. (pobret de mi) News vemos y de nuevo gracias Que vaya bien O:)) --=-kDBnMr/bRwUrJfQ43wxY 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) iQCVAwUARG49ix535IyztBIVAQJGrQQAo1j4NOyvqVyqboEJNVjrpEowHVanoZpJ TqCYc2G6HS2g+cBrdJgnY5tEoRfTYMDm6hDb/n/3rDDkwMr3eI7eQY33RNavGCkV JO7PFeW3uvthjD7czLkQfsz1wa1JDl6+gwQeyR6K5CdZJSySZ+uPcN14ydXxsr48 FiEC+kSerzk= =nGbZ -----END PGP SIGNATURE----- --=-kDBnMr/bRwUrJfQ43wxY--
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads