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