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;
14: int handleSignal(int signum, void *ctx)
15: {
16: HandlerCtx *user = (HandlerCtx*) ctx;
18: user->signum = signum;
19: if (signum == SIGHUP) user->exitHandler = 1;
20: return 0;
21: }
25: int main(int argc, char *args[])
26: {
27: HandlerCtx user;
30: user.exitHandler = 0;
32: PetscInitialize(&argc, &args, (char*) 0, help);
33: PetscPushSignalHandler(handleSignal, &user);
34: while (!user.exitHandler) {
35: if (user.signum > 0) {
36: PetscPrintf(PETSC_COMM_SELF, "Caught signal %d\n", user.signum);
37: user.signum = -1;
38: }
39: }
40: PetscPopSignalHandler();
41: PetscFinalize();
42: return 0;
43: }