1 .\" Copyright (c) 2003,2004 The DragonFly Project. All rights reserved.
3 .\" This code is derived from software contributed to The DragonFly Project
4 .\" by Matthew Dillon <dillon@backplane.com>
6 .\" Redistribution and use in source and binary forms, with or without
7 .\" modification, are permitted provided that the following conditions
10 .\" 1. Redistributions of source code must retain the above copyright
11 .\" notice, this list of conditions and the following disclaimer.
12 .\" 2. Redistributions in binary form must reproduce the above copyright
13 .\" notice, this list of conditions and the following disclaimer in
14 .\" the documentation and/or other materials provided with the
16 .\" 3. Neither the name of The DragonFly Project nor the names of its
17 .\" contributors may be used to endorse or promote products derived
18 .\" from this software without specific, prior written permission.
20 .\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 .\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 .\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23 .\" FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24 .\" COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25 .\" INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
26 .\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27 .\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
28 .\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29 .\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
30 .\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 .\" $DragonFly: src/lib/libc/sys/sys_checkpoint.2,v 1.10 2008/05/02 02:05:04 swildner Exp $
40 .Nd checkpoint or restore a process
47 .Fn sys_checkpoint "int type" "int fd" "pid_t pid" "int retval"
51 system call executes a checkpoint function as specified by
53 Supported types are as follows:
54 .Bl -tag -width ".Dv CKPT_FREEZE" -offset indent
56 Generate a checkpoint file.
59 must be -1 or the pid of the current process.
60 The checkpoint file will be written out to
64 is unused but must be specified as -1.
69 are both specified as -1, the system will generate a checkpoint file
70 using the system checkpoint template.
72 This function returns 0 on success, -1 on error, and typically 1
74 The value returned on resume is controlled by the
78 when resuming a checkpoint file.
79 A user program which installs its own
81 signal handler and calls
83 manually thus has control over both termination/continuance and
86 Restore a checkpointed program.
89 must be specified as -1, and
91 represents the checkpoint file.
94 specifies the value returned to the resumed program if
98 The checkpointed program will replace the current program, similar to
104 Upon successful completion, the value 0 is typically returned.
105 A checkpoint being resumed typically returns a positive value;
106 otherwise the value -1 is returned and the global variable
108 is set to indicate the error.
110 .Bd -literal -offset indent -compact
112 * Demonstrate checkpointing. Use control-E to checkpoint
113 * the program and 'checkpt -r x.ckpt' to resume it.
115 #include <sys/types.h>
116 #include <sys/signal.h>
117 #include <sys/checkpoint.h>
123 void docheckpoint(void);
134 main(int argc, char** argv)
138 signal(SIGCKPT, dockpt);
141 printf("iteration: %d\en", i);
146 printf("Checkpoint requested\en");
159 fd = open("x.ckpt", O_RDWR|O_CREAT|O_TRUNC, 0666);
161 printf("unable to create checkpoint file: %s\en",
166 ret = sys_checkpoint(CKPT_FREEZE, fd, -1, -1);
168 printf("unable to checkpoint: %s\en",
170 } else if (ret == 0) {
171 printf("checkpoint successful, continuing\en");
172 } else if (ret == 1) {
173 printf("resuming from checkpoint.\en");
175 printf("unknown return value %d from sys_checkpoint\en", ret);
178 /* note that the file descriptor is still valid on a resume */
187 is not a valid regular file, socket descriptor, or pipe.
189 all systems necessarily support checkpointing to sockets and pipes.
191 The caller does not have permission to issue the checkpoint command.
192 Checkpointing may be restricted or disabled using sysctls.
194 An I/O error occurred while reading from the file system.
196 An invalid parameter was specified.
198 .Sh CHECKPOINT FEATURES
199 The system checkpointing code will save the process register state (including
200 floating point registers), signal state, file descriptors representing
201 regular files or directories (anything that can be converted into a file
202 handle for storage), and both shared and private memory mappings.
203 Private, writable mappings are copied to the checkpoint file while shared
204 mappings and stored by referencing the file handle and offset.
205 Note that the system checkpointing code does not retain references to
206 deleted files, so mappings and open descriptors of deleted files
208 Unpredictable operation will occur if a checkpoint-unaware program
209 is restored and some of the underlying files mapped by the program
212 The system checkpointing code is not able to retain the process pid, process
213 group, user/group creds, or descriptors 0, 1, and 2.
214 These will be inherited from whomever restores the checkpoint.
216 When a checkpointed program is restored modified private mappings will
217 be mapped from the checkpoint file itself, but major portions of the
218 original program binary will be mapped from the original program binary.
219 If the resumed program is checkpointed again the system will automatically
220 copy any mappings from the original checkpoint file to the new one, since
221 the original is likely being replaced.
222 The caller must not truncate the existing checkpoint file when creating
223 a new one or specify the existing file's file descriptor as the new
224 one as this will destroy the data that the checkpoint operation needs
225 to copy to the new file.
226 It is best to checkpoint to a new file and then rename-over the old, or to
228 the old file before creating the new
229 one so it remains valid as long as the program continues to run.
231 Threaded programs cannot currently be checkpointed.
233 reduced to a single thread before it can be safely checkpointed.
236 mappings cannot currently be checkpointed.
237 A program must restore such mappings manually on resumption.
238 Only regular file and
239 anonymous memory mappings are checkpointed and restored.
240 Device and other special mappings are not.
241 Only regular file descriptors are checkpointed and restored.
242 Devices, pipes, sockets, and other special descriptors are not.
243 Memory wiring states are not checkpointed or restored.
245 states are not checkpointed or restored.
246 Basic mapping permissions are checkpointed and restored.
250 controls which group can use system checkpointing.
251 By default, only users in the
253 group are allowed to checkpoint and restore processes.
254 To allow users in any group to have this capability (risky), set sysctl
258 Two signals are associated with checkpointing.
260 is delivered via the tty ckpt character, usually control-E.
261 Its default action is to checkpoint a program and continue running it.
264 signal can only be delivered by
266 Its default action is to checkpoint a program and then exit.
268 might not be implemented by the system.
269 Both signals are defined to
270 be greater or equal to signal 32 and cannot be manipulated using legacy
273 If a program overrides the default action for a checkpoint signal the
274 system will not undertake any action of its own.
275 The program may issue
276 the checkpoint command from the signal handler itself or simply set a
277 reminder for later action.
278 It is usually safest to set a reminder and
279 do the actual checkpointing from your main loop.
286 function call appeared in