on both Linux and MacOS libattach utilizes UNIX signal (QUIT) to cause a target JVM (attachee) to create the socket file used as transport for subsequent jcmds (and other attach based interactions) and to listen upon that for such.
it should be noted that the default behavior for QUIT (if not blocked or caught) is to terminate the signalled process. during the early lifetime of a JVM, its signal handlers are not yet installed, and thus any signal such as QUIT will cause the default behavior to occur, in this case the JVM will be terminated. this is why some tests are failing with "not alive" the "fix" is similar in nature to that already implemented for linux (however using a different OS dependent mechanism to obtain the attachee JVM's signal masks: sysctl(2)). the method "checkCatchesAndSendQuitTo" will now obtain the "attachee" JVM signal masks and only kill(QUIT) if the current masks indicate that the JVM's signals are now being handled. the behavior in the success case is now identical to the previous implementation, however should the target JVM not become "ready" (signal handlers installed) prior to the attach "timeout" occurring the attach operation will throw an "AttachNotSupportedException" with a suitable error message. see also: https://bugs.openjdk.org/browse/JDK-8350766 ------------- Commit messages: - JDK-8344671: jcheck whitespace 'nits' - JDK-8344671: added stdbool.h and amended exception msg - JDK-89344671: fixed some white space issues - JDK-8344671: added test to macos attach code to test for signal handler state prior to sending QUIT, this will obviate early JVM termination when not ready to attach Changes: https://git.openjdk.org/jdk/pull/24085/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=24085&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8344671 Stats: 58 lines in 2 files changed: 45 ins; 0 del; 13 mod Patch: https://git.openjdk.org/jdk/pull/24085.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/24085/head:pull/24085 PR: https://git.openjdk.org/jdk/pull/24085