Dumping a simplest process in a new session without controll terminal

At first let's dump/restore a trivial process without external dependences.

  • For that we can create a shell script, which will report date and time every second. For removing dependences 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 try to dump a program, which is using a terminal. 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