Change By: Kohsuke Kawaguchi (07/Nov/14 11:48 PM)
Description: durable task step currently uses {{nohup}} to launch a durable process. But if Jenkins is started from an interactive terminal and the user presses {{Ctrl+C}}, the forked process is still gone. So far we've blushed it off saying this is not how Jenkins is typically run. That may be true, but it is also a perfectly reasonable way to run Jenkins, for example for the first time evaluation.

The reason these processes get killed with {{Ctrl+C}} is because shell sends {{SIGINT}} to all the processes in the process group ([source|http://superuser.com/questions/708919/ctrlc-in-a-sub-process-is-killing-a-nohuped-process-earlier-in-the-script]). In looking at {{nohup.c}}, nohup [only ignores SIGHUP|https://gist.github.com/kohsuke/0eeb9bb43ca8d62643dd#file-nohup-c-L219]. You can also run a command like {{nohup sleep 30}} from the command line. hit {{Ctrl+C}}, and observe that the {{sleep 30}} process gets killed.

The root problem is that {{nohup}} is a poor way to isolate a child process. Specifically, it doesn't put the process into a new process group, so it's vulnerable to any signal sent to the entire process group (of which {{Ctrl+C}} is one.) {{
[ setsid |https://gist.github.com/kohsuke/2ed6558d3c4d1f129837] }} is a better way of doing this. This puts the process into a new session (hence also new process group.) So no group-wide signal will get to the child process.

See [Wikipedia process group page|http://en.wikipedia.org/wiki/Process_group] for interaction of signals, process groups, and sessions.
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators.
For more information on JIRA, see: http://www.atlassian.com/software/jira

--
You received this message because you are subscribed to the Google Groups "Jenkins Issues" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to