![]() |
|
|
|
|
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.