<div dir="ltr"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">My initial thought was to fork the initial process, so as to exploit the copy-on-write fork implementation on Linux.<br><div><br></div><div>Then the forked process will call the function, and the parent will make the dump, by providing the PID of its child.</div><div><br></div><div>How does this sound to you? I don&#39;t know if its feasible, I &#39;ll just try to give it a shot!</div><div><br></div></blockquote><div> </div><div><br></div>So, I have tried to do what I &#39;ve described.<br><div><br></div><div>It is based on the code I have previously posted on a Gist.</div><div><br></div><div>So, instead of simply dumping before a functions execution, and then resuming I do the following:</div><div>.I open a pipe to synchronise the 2 processes</div><div>.I fork</div><div>..The child executes</div><div>...setsid()</div><div>...registers a signal handler</div><div>...runs the function<div class="gmail_default" style="font-family:verdana,sans-serif;display:inline">​ daxpy​</div></div><div><span style="line-height:1.5;font-size:13.1999998092651px">...writes something to the pipe (so parent will know when function has finished exec&#39;ing)</span></div><div><span style="line-height:1.5;font-size:13.1999998092651px">...finally then waits, until a signal is received</span>. When this happens, it terminates<span style="line-height:1.5;font-size:13.1999998092651px"><div class="gmail_default" style="font-family:verdana,sans-serif;display:inline">​</div></span></div><div>..The parent waits for something in the pipe</div><div><span style="font-size:13.1999998092651px;line-height:1.5">So the function was called and therefore the copy-on-write has indeed copied all the relevant pages/files/etc in the </span>child&#39;s<span style="font-size:13.1999998092651px;line-height:1.5"> process space. This means that any other irrelevant parts will NOT be included in the images by CRIU, right?</span></div><div><span style="font-size:13.1999998092651px;line-height:1.5">..then parent dumps and provides the childs PID(using criu_set_pid). I also set &quot;shell_job&quot;</span></div><div><span style="font-size:13.1999998092651px;line-height:1.5">..finally parent sents a signal to the child, so it can terminate, and waits/catches the exit code.</span></div><div><br></div><div><span style="font-family:verdana,sans-serif">​Is my assumption correct, that it will copy the relevant parts only on the image files? Is what I am doing feasible?</span><br></div><div><br></div><div>Capture seems okay, and also resuming from capture. However, on restore I get the following error:</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">(00.018260)  10618: Trying to read socket queues image§<br>(00.018276)  10618: Error (tty.c:193): tty: Found slave peer index 4 without correspond master peer</blockquote><div><br></div><div><div class="gmail_default" style="font-family:verdana,sans-serif;display:inline">​I &#39;ve opened the line tty.c:193, but I &#39;ve already have set setsid on child process, and shell_job​</div> <div class="gmail_default" style="font-family:verdana,sans-serif;display:inline">​on parent, which execs the actual dump​.</div></div><div><br></div><div><div class="gmail_default" style="font-family:verdana,sans-serif">​Cheers,</div><div class="gmail_default" style="font-family:verdana,sans-serif">Paschalis​</div></div></div>