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