Here you go: https://bugs.openjdk.java.net/browse/JDK-8212828
If noone else steps in, I can sponsor the change for you. Cheers, Thomas On Tue, Oct 23, 2018 at 4:19 PM David Lloyd <david.ll...@redhat.com> wrote: > > Sure. I don't have any tracking information on the bugreport one I > submitted, but if you can track that down and promote it, it would > save you some typing. Otherwise whatever you can do would be great, > thanks. > On Tue, Oct 23, 2018 at 9:02 AM Thomas Stüfe <thomas.stu...@gmail.com> wrote: > > > > Oh, I can open a bug report on JBS for you. Should I? > > > > (Now I understand the "reuse bug id"). > > > > > > On Tue, Oct 23, 2018 at 3:18 PM David Lloyd <david.ll...@redhat.com> wrote: > > > > > > I've submitted a bug report via bugreport.java.com. If/when it gets > > > promoted to a proper JIRA with an issue number, I'll see if I can put > > > the patch up on jdk/submit. > > > On Thu, Oct 18, 2018 at 4:42 PM David Lloyd <david.ll...@redhat.com> > > > wrote: > > > > > > > > The issue 6850720 isn't _exactly_ to use POSIX_SPAWN for process > > > > launching on Linux, but it's the closest I could find out of what are > > > > really a surprisingly large number of issues that refer to posix_spawn > > > > in one way or another relating to ProcessImpl. There's a different > > > > issue to move from vfork to posix_spawn on Solaris, but I wasn't sure > > > > if that one was quite right to hang this off of. Maybe it should be > > > > yet another issue of its own. > > > > > > > > Anyway: this is a follow-up to the email thread entitled "Runtime.exec > > > > : vfork() concerns and a fix proposal", where it was casually > > > > mentioned that maybe posix_spawn could become an option on Linux, > > > > whereafter it could be thoroughly tested by brave individuals and > > > > eventually maybe become the default on that platform, obsoleting the > > > > vfork support for good. > > > > > > > > The following patch does just that. I've tested it launching a > > > > multi-process WildFly instance a bunch of times, in conjunction with > > > > the conveniently existent "jdk.lang.Process.launchMechanism" property, > > > > and nothing exploded so here it is. The usual deal with git patches: > > > > apply directly through "patch -p1". > > > > > > > > commit f0eb9ff7c46dff76f91160491fcca0eb25d0ab95 > > > > Author: David M. Lloyd <david.ll...@redhat.com> > > > > Date: Thu Oct 18 15:56:37 2018 -0500 > > > > > > > > [JDK-6850720] Enable POSIX_SPAWN as an option for child process > > > > creation on Linux > > > > > > > > diff --git a/make/launcher/Launcher-java.base.gmk > > > > b/make/launcher/Launcher-java.base.gmk > > > > index 0ce0287d2be..c28fe42d102 100644 > > > > --- a/make/launcher/Launcher-java.base.gmk > > > > +++ b/make/launcher/Launcher-java.base.gmk > > > > @@ -84,7 +84,7 @@ endif > > > > > > > > > > > > ################################################################################ > > > > > > > > -ifneq ($(findstring $(OPENJDK_TARGET_OS), macosx solaris aix), ) > > > > +ifneq ($(findstring $(OPENJDK_TARGET_OS), macosx solaris aix linux), ) > > > > $(eval $(call SetupJdkExecutable, BUILD_JSPAWNHELPER, \ > > > > NAME := jspawnhelper, \ > > > > SRC := $(TOPDIR)/src/$(MODULE)/unix/native/jspawnhelper, \ > > > > diff --git a/src/java.base/unix/classes/java/lang/ProcessImpl.java > > > > b/src/java.base/unix/classes/java/lang/ProcessImpl.java > > > > index 368a4f7380b..959e50dfecd 100644 > > > > --- a/src/java.base/unix/classes/java/lang/ProcessImpl.java > > > > +++ b/src/java.base/unix/classes/java/lang/ProcessImpl.java > > > > @@ -89,7 +89,7 @@ final class ProcessImpl extends Process { > > > > > > > > private static enum Platform { > > > > > > > > - LINUX(LaunchMechanism.VFORK, LaunchMechanism.FORK), > > > > + LINUX(LaunchMechanism.VFORK, LaunchMechanism.POSIX_SPAWN, > > > > LaunchMechanism.FORK), > > > > > > > > BSD(LaunchMechanism.POSIX_SPAWN, LaunchMechanism.FORK), > > > > > > > > diff --git a/src/java.base/unix/native/libjava/ProcessImpl_md.c > > > > b/src/java.base/unix/native/libjava/ProcessImpl_md.c > > > > index 533584fdb7a..6869a64f2cc 100644 > > > > --- a/src/java.base/unix/native/libjava/ProcessImpl_md.c > > > > +++ b/src/java.base/unix/native/libjava/ProcessImpl_md.c > > > > @@ -44,7 +44,7 @@ > > > > #include <signal.h> > > > > #include <string.h> > > > > > > > > -#if defined(__solaris__) || defined(_ALLBSD_SOURCE) || defined(_AIX) > > > > +#if defined(__solaris__) || defined(_ALLBSD_SOURCE) || defined(_AIX) > > > > || defined(__linux__) > > > > #include <spawn.h> > > > > #endif > > > > > > > > @@ -390,7 +390,7 @@ forkChild(ChildStuff *c) { > > > > return resultPid; > > > > } > > > > > > > > -#if defined(__solaris__) || defined(_ALLBSD_SOURCE) || defined(_AIX) > > > > +#if defined(__solaris__) || defined(_ALLBSD_SOURCE) || defined(_AIX) > > > > || defined(__linux__) > > > > static pid_t > > > > spawnChild(JNIEnv *env, jobject process, ChildStuff *c, const char > > > > *helperpath) { > > > > pid_t resultPid; > > > > @@ -489,7 +489,7 @@ startChild(JNIEnv *env, jobject process, > > > > ChildStuff *c, const char *helperpath) > > > > #endif > > > > case MODE_FORK: > > > > return forkChild(c); > > > > -#if defined(__solaris__) || defined(_ALLBSD_SOURCE) || defined(_AIX) > > > > +#if defined(__solaris__) || defined(_ALLBSD_SOURCE) || defined(_AIX) > > > > || defined(__linux__) > > > > case MODE_POSIX_SPAWN: > > > > return spawnChild(env, process, c, helperpath); > > > > #endif > > > > > > > > > > > > -- > > > - DML > > > > -- > - DML