"Thomas Jensen" <tje@ccieurope.com> writes:
> jeg har attached en routine til håndtering af SIGUSR1 signalet,
Nej, det har du ikke.
> og ønsker nu at kende pid på den process der har sendt signalet.
> Hvordan får jeg læst denne oplysning ind i min siginfo_t struct
> variable (hvor jeg ser den findes i si_pid)?
Det nedenstående er afprøvet på Solaris. Jeg ved ikke hvor portabelt
det er.
alex
/src/fastarray% cat sig2.c
#include <signal.h>
#include <siginfo.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
void
sigusr1_handler (int sig_no, siginfo_t *sig_info)
{
printf ("SIGUSR1 modtaget.\n");
printf (" signalnummer: %d\n", sig_info->si_signo);
if (sig_info->si_code != SI_NOINFO)
{
printf (" fejlkode: %d", sig_info->si_errno);
if (sig_info->si_errno != 0)
printf (" (%s)\n", strerror (sig_info->si_errno));
else
printf (" \n");
}
if (sig_info->si_code <= 0)
{
printf ("\n signalet blev genereret af en brugerproces\n");
printf (" pid: %ld\n", sig_info->si_pid);
printf (" uid: %ld\n", sig_info->si_uid);
}
return;
}
int
main ()
{
struct sigaction sa;
memset (&sa, 0, sizeof (sa));
sa.sa_handler = sigusr1_handler;
sa.sa_flags = SA_SIGINFO;
if (sigaction (SIGUSR1, &sa, NULL) == -1)
{
perror ("sigaction");
return -1;
}
printf ("%lu\n", getpid());
while (1)
;
return 0;
}
alex
/src/fastarray% gcc -Wall -pedantic sig2.c -o sig2
alex
/src/fastarray% sig2
17426
^Z
Suspended
alex
/src/fastarray% bg
[1] sig2 &
alex
/src/fastarray% kill -USR1 17426
SIGUSR1 modtaget.
signalnummer: 16
fejlkode: 0
signalet blev genereret af en brugerproces
pid: 17247
uid: 2079
alex
/src/fastarray% echo $$
17247
alex
/src/fastarray% id -u
2079
alex
/src/fastarray% kill -KILL 17426
alex
/src/fastarray%
[1] Killed sig2
alex
/src/fastarray%