Line 1: |
Line 1: |
− | Final state is the state that ps tree will have after its dump or restore. | + | Final state is the state a process tree ends up in after CRIU dump or restore. |
| | | |
− | There are 3 possible final states in CRIU: | + | There are 3 possible final states: |
− | # 'Running' (ps tree is executed as usual)
| + | ; Running : processes are running as usual |
− | # 'Stopped' (ps tree is stopped using SIGSTOP)
| + | ; Stopped : processes are stopped using SIGSTOP |
− | # 'Dead' (ps tree is destroyed using SIGKILL)
| + | ; Dead : processes are destroyed using SIGKILL |
| | | |
− | == CLI options for changing of process tree final state == | + | == Changing the default final states == |
− | You can use --leave-stopped option with CRIU dump/restore commands to set process tree final state to 'Stopped'.
| |
| | | |
− | Use --leave-running option to set final state to 'Running'.
| + | You can use the following command line options with CRIU dump and restore commands |
| + | to change the default process tree final state: |
| | | |
− | == Process tree final state after CRIU dump command ==
| + | * <code>--leave-stopped</code> |
| + | * <code>--leave-running</code> |
| | | |
− | By default final state of process tree after dump is 'Dead'.
| + | == criu dump == |
− | So CRIU will kill process tree after it was dumped. But why? Suppose you leave your
| |
− | process tree running after it was dumped. What if it deleted some files it was using
| |
− | during its dump? What if it closed some tcp connections? After that CRIU won't be able
| |
− | to restore process tree from the dump it has created earlier.
| |
− | System simply won't have resources that this process tree requires at
| |
− | the moment captured in dump.
| |
| | | |
− | If your process tree doesn't destroy resources it depended on before dump then you'll be able to restore it after dump with --leave-running option.
| + | By default, the final state of a process tree after <code>criu dump</code> is ''dead'', |
− | But be aware that your process tree left running after dump may modify some state (for example a file) in way not compatible on application level with process tree restored from this dump later.
| + | meaning CRIU kills the process tree right after dumping it. |
| | | |
− | What about leaving process tree stopped after dump was performed? When it is needed?
| + | Such a default makes lot of sense. Suppose the process tree is left running after being dumped. |
− | It may be needed for debugging of CRIU. If CRIU wasn't accurate during dump command
| + | If processes are left running, they will most probably change the filesystem state (for example, |
− | then it would leave some traces in dumped process tree. You can investigate such process tree in
| + | delete a file) and/or networking state (for example, close a TCP connection). After such changes |
− | stopped state. You'll probably find some other use cases for --leave-stopped option with CRIU dump command.
| + | CRIU won't be able to restore the process tree from the dump, as the system simply won't have |
| + | resources that this process tree requires at the moment when it was captured. |
| | | |
− | Leaving process tree running is necessary for predump command and currently --leave-stopped and
| + | On the contrary, if a process tree does not destroy any resources it depended upon before dump, |
− | --leave-running options have on effect on it.
| + | then it is possible to restore it after dump made with <code>--leave-running</code> option. |
| + | Be aware, though, that the process tree left running after the dump may modify some state |
| + | (for example, write to a file) in way that is not compatible on the application level with |
| + | the process tree restored from this dump later. |
| | | |
− | == Process tree final state after CRIU restore command ==
| + | Now, let's consider leaving the process tree stopped after performing the dump. |
− | By default final state of process tree after restore is 'Running'. That's because you usually
| + | One possible use case for that is CRIU debugging. If CRIU was not quite accurate doing dump, |
− | want to immediately start execution of process tree after its restore. You can use --leave-stopped
| + | then it would leave some traces in the dumped process tree. You can investigate such a process tree |
− | option to restore process tree in 'Stopped' state.
| + | in its stopped state. Surely you might find some other cases to use <code>--leave-stopped</code>. |
| | | |
− | == Moving process tree from 'Stopped' state to 'Running' == | + | Also, leaving the process tree running is naturally necessary for the <code>predump</code> |
− | After criu has dumped/restored process tree in 'Stopped' state we sometimes need to continue | + | command, so currently <code>--leave-stopped</code> and <code>--leave-running</code> options |
− | its execution putting process tree into 'Running' state. For this purpose use this [https://github.com/xemul/criu-scripts/blob/master/pstree_cont.py script]. It has only single argument - PID of process tree root. | + | are ignored for <code>predump</code>. |
| + | |
| + | == criu restore == |
| + | |
| + | By default, the final state of a process tree after restore is ''running''. That's because one usually |
| + | wants to immediately resume execution of the process tree after restore. One can use <code>--leave-stopped</code> |
| + | option to restore the process tree and leave it in ''stopped' state. |
| + | |
| + | == Changing the state from stopped to running == |
| + | |
| + | After criu dumped or restored a process tree and left it in ''stopped'' state, |
| + | we may need to continue its execution, putting the process tree into ''running'' state. |
| + | To do that, use the [https://github.com/xemul/criu-scripts/blob/master/pstree_cont.py pstree_cont.py] |
| + | script. Its sole argument is the PID of a process tree root process. |
| | | |
| [[Category: Under the hood]] | | [[Category: Under the hood]] |
| [[Category: API]] | | [[Category: API]] |