1 2 static char help[] = "Tests signal handling.\n\n"; 3 4 #include <petscsys.h> 5 #include <signal.h> 6 7 typedef struct _handlerCtx { 8 int exitHandler; 9 int signum; 10 } HandlerCtx; 11 12 int handleSignal(int signum, void *ctx) 13 { 14 HandlerCtx *user = (HandlerCtx*) ctx; 15 16 user->signum = signum; 17 if (signum == SIGHUP) user->exitHandler = 1; 18 return 0; 19 } 20 21 int main(int argc, char *args[]) 22 { 23 HandlerCtx user; 24 PetscErrorCode ierr; 25 26 user.exitHandler = 0; 27 28 ierr = PetscInitialize(&argc, &args, (char*) 0, help);if (ierr) return ierr; 29 ierr = PetscPushSignalHandler(handleSignal, &user);CHKERRQ(ierr); 30 while (!user.exitHandler) { 31 if (user.signum > 0) { 32 ierr = PetscPrintf(PETSC_COMM_SELF, "Caught signal %d\n", user.signum);CHKERRQ(ierr); 33 user.signum = -1; 34 } 35 } 36 ierr = PetscPopSignalHandler();CHKERRQ(ierr); 37 ierr = PetscFinalize(); 38 return ierr; 39 } 40 41 42 /*TEST 43 44 build: 45 requires: !define(PETSC_MISSING_SIGHUP) 46 47 test: 48 TODO: need to send a signal to the process to kill it from the test harness 49 50 TEST*/ 51