<div dir="ltr"><div>2016-05-16 21:48 GMT+03:00 Andrew Vagin <span dir="ltr">&lt;<a href="mailto:avagin@virtuozzo.com" target="_blank">avagin@virtuozzo.com</a>&gt;</span>:<br></div><div class="gmail_extra"><div class="gmail_quote"><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"><div class=""><div class="h5">On Mon, May 02, 2016 at 06:46:05PM +0300, Eugene Batalov wrote:<br>
&gt; From: Kravchenko Dmitrii &lt;<a href="mailto:equivalence1@gmail.com">equivalence1@gmail.com</a>&gt;<br>
&gt;<br>
&gt; This patch adds implementation of --leave-stopped option<br>
&gt; to CRIU restore cmd. If --leave-stopped is passed then<br>
&gt; each process in ps tree gets SIGSTOP before detaching<br>
&gt; from it.<br>
&gt;<br>
&gt; Signed-off-by: Kravchenko Dmitrii &lt;<a href="mailto:equivalence1@gmail.com">equivalence1@gmail.com</a>&gt;<br>
&gt; Signed-off-by: Eugene Batalov &lt;<a href="mailto:eabatalov89@gmail.com">eabatalov89@gmail.com</a>&gt;<br>
&gt; ---<br>
&gt;  criu/cr-restore.c |  3 ++-<br>
&gt;  criu/crtools.c    | 10 ++++++++++<br>
&gt;  2 files changed, 12 insertions(+), 1 deletion(-)<br>
&gt;<br>
&gt; diff --git a/criu/cr-restore.c b/criu/cr-restore.c<br>
&gt; index ac0943b..d212abe 100644<br>
&gt; --- a/criu/cr-restore.c<br>
&gt; +++ b/criu/cr-restore.c<br>
&gt; @@ -1924,7 +1924,8 @@ static void finalize_restore(void)<br>
&gt;<br>
&gt;               xfree(ctl);<br>
&gt;<br>
&gt; -             if (item-&gt;pid.state == TASK_STOPPED)<br>
&gt; +             if ((item-&gt;pid.state == TASK_STOPPED) ||<br>
&gt; +                             (opts.final_state == TASK_STOPPED))<br>
&gt;                       kill(item-&gt;pid.real, SIGSTOP);<br>
&gt;       }<br>
&gt;  }<br>
&gt; diff --git a/criu/crtools.c b/criu/crtools.c<br>
&gt; index 7a0f977..be33f4c 100644<br>
&gt; --- a/criu/crtools.c<br>
&gt; +++ b/criu/crtools.c<br>
&gt; @@ -688,6 +688,16 @@ int main(int argc, char *argv[], char *envp[])<br>
&gt;                       return 1;<br>
&gt;       }<br>
&gt;<br>
&gt; +     /*<br>
&gt; +      * When a process group becomes an orphan,<br>
&gt; +      * its processes are sent a SIGHUP signal<br>
&gt; +      */<br>
&gt; +     if (!strcmp(argv[optind], &quot;restore&quot;) &amp;&amp;<br>
&gt; +                     opts.restore_detach &amp;&amp;<br>
&gt; +                     opts.final_state == TASK_STOPPED &amp;&amp;<br>
&gt; +                     opts.shell_job)<br>
&gt; +             pr_warn(&quot;Stopped and detached shell job will get SIGHUP from OS.&quot;);<br>
<br>
</div></div>Why does this specific for TASK_STOPPED?<br></blockquote><div><br></div><div>I&#39;ve checked this thing better.</div><div>SIGHUP is only sent when a process is stopped. So I think my comment</div><div><span style="color:rgb(80,0,80)">&gt; +     /*</span><br style="color:rgb(80,0,80)"><span style="color:rgb(80,0,80)">&gt; +      * When a process group becomes an orphan,</span><br style="color:rgb(80,0,80)"><span style="color:rgb(80,0,80)">&gt; +      * its processes are sent a SIGHUP signal</span><br style="color:rgb(80,0,80)"><span style="color:rgb(80,0,80)">&gt; +      */</span><br></div><div>is not precise enough. Do you think we need to make it more precise?</div><div><br></div><div>Reference in POSIX to the subject: <a href="http://linux.die.net/man/2/getpgrp">http://linux.die.net/man/2/getpgrp</a><br></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">If the exit of the process causes a process group to become orphaned, and if any member of the newly orphaned process group is stopped, then a SIGHUP signal followed by a SIGCONT signal will be sent to each process in the newly orphaned process group. An orphaned process group is one in which the parent of every member of process group is either itself also a member of the process group or is a member of a process group in a different session</blockquote><div> </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">
<span class="">&gt; +<br>
&gt;       if (chdir(work_dir)) {<br>
&gt;               pr_perror(&quot;Can&#39;t change directory to %s&quot;, work_dir);<br>
&gt;               return 1;<br>
&gt; --<br>
&gt; 1.9.1<br>
&gt;<br>
</span>&gt; _______________________________________________<br>
&gt; CRIU mailing list<br>
&gt; <a href="mailto:CRIU@openvz.org">CRIU@openvz.org</a><br>
&gt; <a href="https://lists.openvz.org/mailman/listinfo/criu" rel="noreferrer" target="_blank">https://lists.openvz.org/mailman/listinfo/criu</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">Best regards,<br>Eugene Batalov.</div>
</div></div>