need help with sigaction and siginfo_t

nikita kozlov kozlov_n at epitech.net
Sat Nov 17 08:30:38 PST 2007


hello,
I'm a student and we are working on FreeBSD.
My problem is i don't understand how to use SA_SIGINFO and siginfo_t.
The following code caught my SIGUSR1 with a "kill -30 my_server_pid"
from my shell.
but siginfo_t is empty when i'm debugging my program with gdb.
my output is :
> pid 0
and in gdb i have :
{
si_signo = 30,
si_errno = 0,
si_code = 0,
si_pid = 0,
si_uid = 0,
si_status = 0,
si_addr = 0x2,
si_value = {sigval_int = 0,sigval_ptr = 0x0},
si_band = 0,
__spare__ = {0, 0, 0, 0, 0, 0, 0}
}

anyone have an idea why my siginfo_t is empty please ?
Here is my code:

#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <stdio.h>

static void     addtrue(int sig, siginfo_t *info,  void *ctx) 
{ 
	printf("pid %i\n", info->si_pid); 
}
 
static void     init_server() 
{ 
	struct sigaction test; 
	memset(&test, 0, sizeof(test)); 
	test.sa_flags = SA_SIGINFO; 
	test.sa_sigaction = addtrue; 
	sigaction(SIGUSR1, &test, NULL); 
	getchar();
}

int     main() 
{
	printf("my pid: %i\n", getpid());
	init_server(); 
	return (0); 
}





More information about the freebsd-hackers mailing list