Actual source code: ex1.c

petsc-3.3-p7 2013-05-11
  1: /*$Id: ex1.c,v 1.18 2003/08/08 21:30:50 knepley Exp $*/

  3: static char help[] = "Tests signal handling.\n\n";

  5: #include <petscsys.h>
  6: #include <signal.h>

  8: typedef struct _handlerCtx {
  9:   int exitHandler;
 10:   int signum;
 11: } HandlerCtx;

 15: int handleSignal(int signum, void *ctx)
 16: {
 17:   HandlerCtx *user = (HandlerCtx *) ctx;

 19:   user->signum = signum;
 20:   if (signum == SIGHUP) {
 21:     user->exitHandler = 1;
 22:   }
 23:   return 0;
 24: }

 28: int main(int argc, char *args[])
 29: {
 30:   HandlerCtx     user;

 33:   user.exitHandler = 0;

 35:   PetscInitialize(&argc, &args, (char *) 0, help);
 36:   PetscPushSignalHandler(handleSignal, &user);
 37:   while(!user.exitHandler) {
 38:     if (user.signum > 0) {
 39:       PetscPrintf(PETSC_COMM_SELF, "Caught signal %d\n", user.signum);
 40:       user.signum = -1;
 41:     }
 42:   }
 43:   PetscPopSignalHandler();
 44:   PetscFinalize();
 45:   return 0;
 46: }