Simple loop

From CRIU
Jump to navigation Jump to search

This HOWTO describes how to dump a very simple shell scripts that just loops and shows that it's alive.

First of all, if you try to simply launch such program and dump it crtools will fail. This is because the program you launch from shell shared session and terminal with the shell itself, but crtools should make sure, that no resources are used by external processes. So this simple test would be a little bit trickier, that just it.

Dumping a simplest process in a new session without control terminal

  • For that we can create a shell script, which will report date and time every second. For removing dependencies on a current terminal it will be executed in a new session and output will be redirected in a file.
$ cat > test.sh <<-EOF
#!/bin/sh
while :; do
    sleep 1
    date
done
EOF

$ chmod +x test.sh
$ setsid ./test.sh  < /dev/null &> test.log &
[2] 2220
[2]+  Done                    setsid ./test.sh < /dev/null &>test.log
  • Get pid of the test process:
$  ps -C test.sh
 PID TTY          TIME CMD
2221 ?        00:00:00 test.sh
  • Dump the test process.
$  ~/crtools/crtools dump -t 2221 -vvv -o dump.log && echo OK
OK
  • The state of the processes are saved in a few files:
$  ls
core-2221.img   eventpoll-tfd.img  filelocks-2221.img  inotify.img       netlinksk.img     pipes.img         sigacts-2424.img   test.log
core-2424.img   fanotify.img       filelocks-2424.img  inotify-wd.img    packetsk.img      pstree.img        signalfd.img       test.sh
creds-2221.img  fanotify-mark.img  fs-2221.img         inventory.img     pagemap-2221.img  reg-files.img     signal-p-2221.img  tty.img
creds-2424.img  fdinfo-2.img       fs-2424.img         itimers-2221.img  pagemap-2424.img  remap-fpath.img   signal-p-2424.img  tty-info.img
dump.log        fdinfo-3.img       ids-2221.img        itimers-2424.img  pages-1.img       rlimit-2221.img   signal-s-2221.img  unixsk.img
eventfd.img     fifo-data.img      ids-2424.img        mm-2221.img       pages-2.img       rlimit-2424.img   signal-s-2424.img  vmas-2221.img
eventpoll.img   fifo.img           inetsk.img          mm-2424.img       pipes-data.img    sigacts-2221.img  sk-queues.img      vmas-2424.img
  • Restore the test process.
$ ~/crtools/crtools restore -d -t 2221 -vvv -o restore.log && echo OK
OK

Dumping one shell job

Now let's see how to dump the same program when it is just launched from shell without additional setsid-s and stdio-s redirection.

For that we need to execute our test script or another program (e.g. "top") from a terminal without redirections. crtools supports only Unix98 PTYs.

$ ./test.sh
$ ps -C test.sh
  PID TTY          TIME CMD
 2621 pts/1    00:00:00 test.sh

Currently crtools doesn't support a stopped task, so "crtools dump" must be executed from another terminal.

$  ~/crtools/crtools 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.013111) Error (cr-dump.c:1636): Dumping FAILED.

crtools asks to set the option --shell-job, because we try to dump only a part of session and a slave point of a tty pair. It's a common rule to ask a user, if only a part of something is dumped.

$ ~/crtools/crtools dump -vvvv -o dump.log -t 2621 --shell-job && echo Ok
Ok
$  ~/crtools/crtools restore -vvvv -o restore.log -t 2621 --shell-job
Fri Apr 12 12:41:09 MSK 2013
Fri Apr 12 12:41:10 MSK 2013