xref: /petsc/src/sys/error/tests/ex1.c (revision 4e278199b78715991f5c71ebbd945c1489263e6c)
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 /*TEST
42 
43    build:
44      requires: !define(PETSC_MISSING_SIGHUP)
45 
46    test:
47      TODO: need to send a signal to the process to kill it from the test harness
48 
49 TEST*/
50