Thomas Raehalme commented on SUREFIRE-1422:

I've written about the issue [on my 
blog|http://raehal.me/maven-surefire-plugin-on-Docker/] with examples of both 
output and contents of the dump file. 

You can verify the ps functionality with Docker:
$ docker run -it --rm maven:3.5.2-jdk-8-alpine /bin/sh
/ # ps --help
BusyBox v1.25.1 (2016-10-26 16:15:20 GMT) multi-call binary.

Usage: ps [-o COL1,COL2=HEADER]

Show list of processes

-o COL1,COL2=HEADER     Select columns for display
/ # 
As you can see the default implementation from BusyBox in Alpine is rather 
limited regarding options.

But if you install the {{procps}} package, you get the needed options.
$ docker run -it --rm maven:3.5.2-jdk-8-alpine /bin/sh
/ # apk add --update procps
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/community/x86_64/APKINDEX.tar.gz
(1/3) Installing libintl (
(2/3) Installing libproc (3.3.12-r1)
(3/3) Installing procps (3.3.12-r1)
Executing busybox-1.25.1-r0.trigger
OK: 110 MiB in 62 packages
/ # ps --help all

 ps [options]

Basic options:
 -A, -e               all processes
 -a                   all with tty, except session leaders
  a                   all with tty, including other users
 -d                   all except session leaders
 -N, --deselect       negate selection
  r                   only running processes
  T                   all processes on this terminal
  x                   processes without controlling ttys

Selection by list:
 -C <command>         command name
 -G, --Group <GID>    real group id or name
 -g, --group <group>  session or effective group name
 -p, p, --pid <PID>   process id
        --ppid <PID>  parent process id
 -q, q, --quick-pid <PID>
                      process id (quick mode)
 -s, --sid <session>  session id
 -t, t, --tty <tty>   terminal
 -u, U, --user <UID>  effective user id or name
 -U, --User <UID>     real user id or name

  The selection options take as their argument either:
    a comma-separated list e.g. '-u root,nobody' or
    a blank-separated list e.g. '-p 123 4567'

Output formats:
 -F                   extra full
 -f                   full-format, including command lines
  f, --forest         ascii art process tree
 -H                   show process hierarchy
 -j                   jobs format
  j                   BSD job control format
 -l                   long format
  l                   BSD long format
 -M, Z                add security data (for SELinux)
 -O <format>          preloaded with default columns
  O <format>          as -O, with BSD personality
 -o, o, --format <format>
                      user-defined format
  s                   signal format
  u                   user-oriented format
  v                   virtual memory format
  X                   register format
 -y                   do not show flags, show rss vs. addr (used with -l)
     --context        display security context (for SELinux)
     --headers        repeat header lines, one per page
     --no-headers     do not print header at all
     --cols, --columns, --width <num>
                      set screen width
     --rows, --lines <num>
                      set screen height

Show threads:
  H                   as if they were processes
 -L                   possibly with LWP and NLWP columns
 -m, m                after processes
 -T                   possibly with SPID column

Miscellaneous options:
 -c                   show scheduling class with -l option
  c                   show true command name
  e                   show the environment after command
  k,    --sort        specify sort order as: [+|-]key[,[+|-]key[,...]]
  L                   show format specifiers
  n                   display numeric uid and wchan
  S,    --cumulative  include some dead child process data
 -y                   do not show flags, show rss (only with -l)
 -V, V, --version     display version information and exit
 -w, w                unlimited output width

        --help <simple|list|output|threads|misc|all>
                      display help and exit

For more details see ps(1).
/ # 
Hope this helps! If I can help with anything please let me know.

> Forking fails on Linux if /bin/ps isn't available
> -------------------------------------------------
>                 Key: SUREFIRE-1422
>                 URL: https://issues.apache.org/jira/browse/SUREFIRE-1422
>             Project: Maven Surefire
>          Issue Type: Bug
>          Components: process forking
>    Affects Versions: 2.20.1
>         Environment: Linux (Debian 9 with OpenJDK 8)
>            Reporter: Emmanuel Bourg
>            Assignee: Tibor Digana
>            Priority: Major
>             Fix For: 2.21.0
> Hi,
> With the changes introduced by SUREFIRE-1302 I'm now experiencing a failure 
> on Linux when the fork mode is enabled:
> {code}
> [ERROR] Failed to execute goal 
> org.apache.maven.plugins:maven-surefire-plugin:2.20.1:test (default-test) on 
> project foo: There are test failures.
> [ERROR] Please refer to /foo/target/surefire-reports for the individual test 
> results.
> [ERROR] Please refer to dump files (if any exist) [date]-jvmRun[N].dump, 
> [date].dumpstream and [date]-jvmRun[N].dumpstream.
> [ERROR] The forked VM terminated without properly saying goodbye. VM crash or 
> System.exit called?
> {code}
> I traced the issue back to the PpidChecker class, the code assumes that 
> {{/bin/ps}} or {{/usr/bin/ps}} exist but this isn't guaranteed (especially on 
> trimmed down containers commonly used for continuous integration).
> It would be nice to have a fallback mechanism when ps isn't available, or at 
> least check its existence and display an explicit message stating that it 
> must be installed.

This message was sent by Atlassian JIRA

Reply via email to