/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
PId på sending process
Fra : Thomas Jensen


Dato : 30-04-01 10:51

Hej,
jeg har attached en routine til håndtering af SIGUSR1 signalet,
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)?
Tak,
Thomas



 
 
Soeren Sandmann (30-04-2001)
Kommentar
Fra : Soeren Sandmann


Dato : 30-04-01 18:15

"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%

Thomas (01-05-2001)
Kommentar
Fra : Thomas


Dato : 01-05-01 20:44

Takker.

> > jeg har attached en routine til håndtering af SIGUSR1 signalet,
>
> Nej, det har du ikke.

Jo. Med Signal(SIGUSR1, sigusr_handler) - hvis jeg husker
parameter rækkefølgen rigtigt.



Soeren Sandmann (02-05-2001)
Kommentar
Fra : Soeren Sandmann


Dato : 02-05-01 13:46

"Thomas" <thjensen@geocities.com> writes:

> > > jeg har attached en routine til håndtering af SIGUSR1 signalet,
> >
> > Nej, det har du ikke.
>
> Jo. Med Signal(SIGUSR1, sigusr_handler) - hvis jeg husker
> parameter rækkefølgen rigtigt.

Nåh. Jeg troede du mente at du havde vedhæftet en fil med en rutine.

Men du er nødt til at bruge sigaction() hvis du vil have information i
siginfo_t-pointeren; signal() er ikke nok.

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste