/* * Josh Hursey * 7/20/2005 * * Berkeley Labs Checkpoint Restart API example. * * To compile this program: * $ gcc -lcr -o a_blcr_example a_blcr_example.c * * To run this program: * $ cr_run ./a_blcr_example * * To generate a checkpoint context file: * While the program is running, in a separate terminal execute: * $ cr_checkpoint PID * Where PID is the pid of this process. * * To restart from a context file: * $ cr_restart context.PID * */ #include #include /* * Thread Context Callback */ static int my_thread_callback(void *data_ptr) { int did_restart; did_restart = cr_checkpoint(0); if(did_restart > 0) { printf("Restarting (Thread)...\n"); } else { printf("Continuing (Thread)...\n"); } return 0; } /* * Signal Context Callback */ static int my_signal_callback(void *data_ptr) { int did_restart; did_restart = cr_checkpoint(0); if(did_restart) { printf("Restarting (Signal)...\n"); } else { printf("Continuing (Signal)...\n"); } return 0; } int main() { int i; int handle = 0; int cr_signal_callback_id; int cr_thread_callback_id; /* * Initialize BLCR */ if (cr_init() < 0) { printf("cr_init() failed!\n"); return 0; } /* * Register the callbacks */ cr_signal_callback_id = cr_register_callback(my_signal_callback, &handle, CR_SIGNAL_CONTEXT); cr_thread_callback_id = cr_register_callback(my_thread_callback, &handle, CR_THREAD_CONTEXT); /* * Start program */ printf("My pid = %d\n", getpid()); for(i = 0 ; i < 10; ++i) { printf("Iteration %d\n", i); sleep(1); } return 0; }