Parent Directory
|
Revision Log
|
Revision Graph
o add a signal handler so that a user can run "killall mitgcmuv" and the model will, at the end of the current iteration, write out all the normal checkpoint files and gracefully stop - off by default so its very unlikely to hurt anything - TODO: can be extended with an MPI global sum that will allow it to work the same way in an MPI environment
1 | /* |
2 | * $Header: $ |
3 | * $Name: $ |
4 | |
5 | //BOP |
6 | // !ROUTINE: sigreg |
7 | // !INTERFACE: |
8 | sigreg() |
9 | |
10 | // !DESCRIPTION: |
11 | // Register a signal handler |
12 | |
13 | //EOP |
14 | |
15 | */ |
16 | |
17 | /* Here, we get the definition of the FC_NAMEMANGLE() macro. */ |
18 | #include "FC_NAMEMANGLE.h" |
19 | |
20 | /* #define FC_NAMEMANGLE(X) X ## _ */ |
21 | |
22 | #include <stdlib.h> |
23 | #include <stdio.h> |
24 | #include <signal.h> |
25 | #include <errno.h> |
26 | #include <ucontext.h> |
27 | |
28 | int * ip; |
29 | |
30 | static void killhandler( |
31 | unsigned int sn, siginfo_t si, struct ucontext *sc ) |
32 | { |
33 | *ip = *ip + 1; |
34 | return; |
35 | } |
36 | |
37 | /* int main( int argc, char ** argv ) */ |
38 | void FC_NAMEMANGLE(sigreg) (int * aip) |
39 | { |
40 | ip = aip; |
41 | struct sigaction s; |
42 | s.sa_flags = SA_SIGINFO; |
43 | s.sa_sigaction = (void *)killhandler; |
44 | if(sigaction (SIGTERM,&s,(struct sigaction *)NULL)) { |
45 | printf("Sigaction returned error = %d\n", errno); |
46 | exit(0); |
47 | } |
48 | return; |
49 | } |
50 | |
51 |
ViewVC Help | |
Powered by ViewVC 1.1.22 |