ftp.nice.ch/Attic/openStep/implementation/gnustep/sources/alpha-snapshots/pthreads.0.9.2.tgz#/pthreads-0.9.2/test_signals/test3.c

This is test3.c in view mode; [Download] [Up]

/*
 * FILE: A test of pthread_sigaction()
 */
#include <pthread.h>
#include <stdio.h>
#include <utils.h>

extern int getpid( void );

void
ctrl_c_handler( int sig )
{
	printf("^C interrupt.");
	pthread_kill( NULL, SIGKILL );
}

void
term_handler( int sig )
{
	pthread_lock_global_np();
	printf("Caught %d %s in handler!\n", sig, sys_signame[sig] );
	pthread_unlock_global_np();
}

void
catcher( void )
{
	struct timespec ts = { 0, 50000 };

	while( 1 )
	{
		printf("catcher");
		pthread_delay_np( &ts );
	}

	pthread_exit( (void *) 0 );
}


int main( int argc, char *argv[] )
{
   pthread_t th;
   struct sigaction act;
   struct timespec ts = { 0, 100000 };

   act.sa_handler = term_handler;
   sigemptyset( &act.sa_mask );
   pthread_sigaction_np( SIGTERM, &act, NULL );

   act.sa_handler = ctrl_c_handler;
   sigemptyset( &act.sa_mask );
   pthread_sigaction_np( SIGINT, &act, NULL );

   pthread_create( &th, NULL, (thread_proc_t) catcher, NULL );

   /*
    * Sleep for 0.5 seconds, wake-up, and send a signal to the
	* catcher thread.  Do this until the process takes a kill -9.
    */
   while( 1 )
   {
	   pthread_delay_np( &ts );
	   pthread_kill( th, SIGTERM );
   }

   return(0);
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.