Line 1: |
Line 1: |
− | {{FIXME|this is for [[User:Ebatalov]] to fill in}}
| + | Final state is the state a process tree ends up in after CRIU dump or restore. |
| + | |
| + | There are 3 possible final states: |
| + | ; Running : processes are running as usual |
| + | ; Stopped : processes are stopped using SIGSTOP |
| + | ; Dead : processes are destroyed using SIGKILL |
| + | |
| + | == Changing the default final states == |
| + | |
| + | You can use the following command line options with CRIU dump and restore commands |
| + | to change the default process tree final state: |
| + | |
| + | * <code>--leave-stopped</code> |
| + | * <code>--leave-running</code> |
| + | |
| + | == criu dump == |
| + | |
| + | By default, the final state of a process tree after <code>criu dump</code> is ''dead'', |
| + | meaning CRIU kills the process tree right after dumping it. |
| + | |
| + | Such a default makes lot of sense. Suppose the process tree is left running after being dumped. |
| + | If processes are left running, they will most probably change the filesystem state (for example, |
| + | delete a file) and/or networking state (for example, close a TCP connection). After such changes |
| + | 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. |
| + | |
| + | On the contrary, if a process tree does not destroy any resources it depended upon before dump, |
| + | 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. |
| + | |
| + | Now, let's consider leaving the process tree stopped after performing the dump. |
| + | One possible use case for that is CRIU debugging. If CRIU was not quite accurate doing dump, |
| + | then it would leave some traces in the dumped process tree. You can investigate such a process tree |
| + | in its stopped state. Surely you might find some other cases to use <code>--leave-stopped</code>. |
| + | |
| + | Also, leaving the process tree running is naturally necessary for the <code>predump</code> |
| + | command, so currently <code>--leave-stopped</code> and <code>--leave-running</code> options |
| + | 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, changing the state to ''running''. |
| + | 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: API]] |