Skip to content

Commit bb9c965

Browse files
[JENKINS-75512] Ensure SIGPIPE is not hidden when calling shell script to avoid hanging.
1 parent a2cbb37 commit bb9c965

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

src/main/java/org/jenkinsci/plugins/durabletask/BourneShellScript.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,11 @@ private List<String> scriptLauncherCmd(ShellController c, FilePath ws, @CheckFor
264264
cmdString = cmdString.replace("$", "$$"); // escape against EnvVars jobEnv in LocalLauncher.launch
265265
List<String> cmd = new ArrayList<>();
266266
if (os != OsType.DARWIN && os != OsType.WINDOWS) { // JENKINS-25848 JENKINS-33708
267-
cmd.add("nohup");
267+
// Some java implementation do block SIGPIPE signal by default, so make sure the default
268+
// signal handler is used to avoid having commands hanging for ever.
269+
// env --default-signal=SIGPIPE was introduced in coreutils 8.31 released in 2019,
270+
// so cope with old OS not supporting this.
271+
cmd.addAll(Arrays.asList("sh", "-c", "if env --default-signal=SIGPIPE true 1>/dev/null 2>&1; then exec env --default-signal=SIGPIPE \"$$@\"; else exec \"$$@\"; fi", "--", "nohup"));
268272
}
269273
if (LAUNCH_DIAGNOSTICS) {
270274
cmd.addAll(Arrays.asList("sh", "-c", cmdString));

0 commit comments

Comments
 (0)