Discussion:
Saber identificador de Proceso que envia una señal
(demasiado antiguo para responder)
alidhaey
2004-12-24 11:05:30 UTC
Permalink
En Unix, mediante la llamada al sistema kill() se puede enviar una
señal a un proceso determinado identificado por el pid del mismo. El
proceso receptor de las señales, recibe la señal, que es tratada como
una interrupcion por software, mediante la declaración del
correspondiente manejador de señal. Para eso utiliza la función
signal que relaciona el tipo de señal y la función manejadora
(handler) que se encargará de realizar el tratamiento de la señal.

Su uso es muy típico para comunicación de procesos y no implica
ningún conocimiento avanzado de programación. Es muy simple.

Mi duda, y después de estar consultando en varios libros y en el
propio MAN, es ¿como puede el proceso receptor de señales determinar
el pid del proceso que envia la señal?.

Un saludo y felices fiestas.
J.A. Gutierrez
2005-01-03 08:54:21 UTC
Permalink
alidhaey <***@gmail.com> wrote:

: propio MAN, es ¿como puede el proceso receptor de señales determinar
: el pid del proceso que envia la señal?.

no puede
--
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)
alidhaey
2005-01-03 10:42:34 UTC
Permalink
Mi inglés no es para tirar cohetes, pero me defiendo un poco. Y ya que
me dices que en el propio manual aparece la respuesta a mi pregunta me
gustaría saber en qué sección del manual lo has visto. He mirado
bastante en él y no he encontrado nada al respecto. Las páginas del
manual que he consultado corresponden a las que vienen en un a maquina
Sun con Solaris instalado -versión 5.8-.

Un saludo.
J.A. Gutierrez
2005-01-03 12:43:41 UTC
Permalink
alidhaey <***@gmail.com> wrote:
: Mi inglés no es para tirar cohetes, pero me defiendo un poco. Y ya que
: me dices que en el propio manual aparece la respuesta a mi pregunta me
: gustaría saber en qué sección del manual lo has visto. He mirado

?????

No se de donde te he dicho yo que en el propio manual aparece
la respuesta.
Me he limitado a dejar dos lineas tuyas como referencia de
contexto y a responder con dos unicas palabras ("no puede")

: bastante en él y no he encontrado nada al respecto. Las páginas del
: manual que he consultado corresponden a las que vienen en un a maquina
: Sun con Solaris instalado -versión 5.8-.

De todas formas, ya que lo comentas, veamos que dicen
las paginas de manual de un Solaris 8:

Veamos sigaction(2):

The handler routine can be declared:

void handler (int sig, siginfo_t *sip, ucontext_t *uap);

veamos siginfo(3HEAD):

User Signals
If the value of si_code is less than or equal to 0, then
the signal was generated by a user process (see kill(2),
_lwp_kill(2), sigqueue(3RT), sigsend(2), abort(3C), and
raise(3C)) and the siginfo structure contains the following
additional information:

typedef long pid_t si_pid /* sending process ID */
typedef long uid_t si_uid /* sending user ID */



Conclusiones:

a) En mi respuesta anterior estaba yo equivocado, y dependiendo
de la implementacion, si que puede ser posible saber el PID del
proceso que envia la se~nal.

b) Efectivamente todo esta en las paginas de manual.


PS: en todo caso, estos temas se corresponderian mas con
es.comp.os.linux.programacion (ya que no existe
es.comp.os.unix.programacion) que con un grupo de C, en el
que se supone que entran mas bien cosas independientes del
sistema operativo.
--
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)
alidhaey
2005-01-03 13:00:45 UTC
Permalink
Malinterprete mal lo que decias, creyendo que tu respuesta se basaba en
algo que habias leido del propio manual.

Si, parece que para saber el pid del proceso que envia la señal hay
que utilizar la versión extendida de la declaración del manejador de
la señal:

void handler (int sig, siginfo_t *sip, ucontext_t *uap);

Más que nada es simple curiosidad, realmente si fuera una necesario
comunicar varios procesos entre sí e identificar cual de ellos es el
que envia el 'mensaje' (en este caso hablo de señal), se debería
utilizar otros mecanismos de comunicación.

De todas formas miraré en los otros foros que me indicas, puesto que
todo depende de la implementación particular del SS.OO.
Un saludo y gracias.

Loading...