Line 1: |
Line 1: |
| + | This HOWTO describes how to dump a trivial program. |
| + | |
| + | == Simplest case == |
| + | |
| + | === Prepare === |
| + | |
| + | Let's create a shell script which loops and reports time every second: |
| + | |
| $ cat > test.sh <<-EOF | | $ cat > test.sh <<-EOF |
| #!/bin/sh | | #!/bin/sh |
Line 6: |
Line 14: |
| done | | done |
| EOF | | EOF |
− |
| |
| $ chmod +x test.sh | | $ chmod +x test.sh |
| + | |
| + | === Run (isolated) === |
| + | |
| + | Now, if you try to simply run and try to dump such a program, criu will fail. The reason is a program you launch from the shell shares some common resources with the shell, notably its session and terminal. Criu has a built-in check that makes sure there are no such resources. |
| + | |
| + | To remove the dependency on a current terminal, let's executed our script in a new session and redirect its output to a file: |
| + | |
| $ setsid ./test.sh < /dev/null &> test.log & | | $ setsid ./test.sh < /dev/null &> test.log & |
| [2] 2220 | | [2] 2220 |
| [2]+ Done setsid ./test.sh < /dev/null &>test.log | | [2]+ Done setsid ./test.sh < /dev/null &>test.log |
| + | |
| + | === Dump === |
| + | |
| + | Get the PID of the test process: |
| | | |
| $ ps -C test.sh | | $ ps -C test.sh |
| PID TTY TIME CMD | | PID TTY TIME CMD |
| 2221 ? 00:00:00 test.sh | | 2221 ? 00:00:00 test.sh |
− | $ ~/crtools/crtools dump -t 2221 -vvv -o dump.log && echo OK | + | |
| + | Dump it: |
| + | |
| + | # criu dump -t 2221 -vvv -o dump.log && echo OK |
| OK | | OK |
| + | |
| + | '''Tip:''' Alternatively, you can combine both steps into a single command: <code># criu dump -t $(pgrep test.sh) -v4 -o dump.log</code> |
| + | |
| + | === Check dump files === |
| + | |
| + | The state of the process(es) is saved to a few files: |
| + | |
| $ ls | | $ ls |
| core-2221.img eventpoll-tfd.img filelocks-2221.img inotify.img netlinksk.img pipes.img sigacts-2424.img test.log | | core-2221.img eventpoll-tfd.img filelocks-2221.img inotify.img netlinksk.img pipes.img sigacts-2424.img test.log |
Line 26: |
Line 54: |
| eventpoll.img fifo.img inetsk.img mm-2424.img pipes-data.img sigacts-2221.img sk-queues.img vmas-2424.img | | eventpoll.img fifo.img inetsk.img mm-2424.img pipes-data.img sigacts-2221.img sk-queues.img vmas-2424.img |
| | | |
− | $ ~/crtools/crtools restore -d -t 2221 -vvv -o restore.log && echo OK | + | === Restore === |
| + | |
| + | Restore the test process: |
| + | |
| + | # criu restore -d -vvv -o restore.log && echo OK |
| OK | | OK |
| + | |
| + | == A shell job == |
| + | |
| + | Now let's see how to dump the same program when it is just started from the shell without any additional setsid and stdio redirection. |
| + | For that we need to execute our test script or another program (e.g. "top") from a terminal without any redirection. |
| + | |
| + | Note criu only supports [http://en.wikipedia.org/wiki/Pseudo_terminal Unix98 PTYs]. |
| + | |
| + | === Run === |
| | | |
| $ ./test.sh | | $ ./test.sh |
Line 34: |
Line 75: |
| 2621 pts/1 00:00:00 test.sh | | 2621 pts/1 00:00:00 test.sh |
| | | |
− | $ ~/crtools/crtools dump -t 2621 | + | === Dump === |
| + | |
| + | Currently criu doesn't support a stopped task, so "criu dump" must be executed from another terminal. |
| + | |
| + | # criu dump -t 2621 |
| (00.012929) Error (tty.c:1022): tty: Found dangling tty with sid 940 pgid 2621 (pts) on peer fd 0. Consider using --shell-job option. | | (00.012929) Error (tty.c:1022): tty: Found dangling tty with sid 940 pgid 2621 (pts) on peer fd 0. Consider using --shell-job option. |
| (00.013111) Error (cr-dump.c:1636): Dumping FAILED. | | (00.013111) Error (cr-dump.c:1636): Dumping FAILED. |
− | $ ~/crtools/crtools dump -vvvv -o dump.log -t 2621 --shell-job && echo Ok | + | |
− | Ok | + | See, criu asks to set the <code>--shell-job</code>, because we try to dump only a part of a session and a slave end of a tty pair. It is a common rule to ask a user, if only a part of something is dumped. |
− | $ ~/crtools/crtools restore -vvvv -o restore.log -t 2621 --shell-job | + | |
| + | # criu dump -vvvv -o dump.log -t 2621 --shell-job && echo OK |
| + | OK |
| + | |
| + | === Restore === |
| + | |
| + | # criu restore -vvvv -o restore.log --shell-job |
| Fri Apr 12 12:41:09 MSK 2013 | | Fri Apr 12 12:41:09 MSK 2013 |
| Fri Apr 12 12:41:10 MSK 2013 | | Fri Apr 12 12:41:10 MSK 2013 |
| + | |
| + | [[Category:HOWTO]] |