Packages
wallaby
0.22.0
0.31.0
0.30.12
0.30.11
0.30.10
0.30.9
0.30.8
0.30.7
0.30.6
0.30.5
0.30.4
0.30.3
0.30.2
0.30.1
0.30.0
0.29.1
0.29.0
0.28.1
0.28.0
0.27.0
0.26.2
0.26.1
0.26.0
0.25.1
0.25.0
0.24.1
0.24.0
0.23.0
0.22.0
0.21.0
0.20.0
0.19.2
0.19.1
0.19.0
0.18.1
0.18.0
0.17.0
0.16.1
0.16.0
0.15.0
0.14.0
0.13.0
0.12.0
0.11.1
0.11.0
0.10.0
0.9.0
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.1
0.3.0
0.2.0
0.1.0
0.0.1
Concurrent feature tests for elixir
Current section
Files
Jump to
Current section
Files
priv/run_phantom.sh
#!/bin/sh
#
# Wrapper script to start an external program and terminate it when it either
# receives a SIGINT, SIGHUP, or SIGTERM or when STDIN closes. This script also
# waits until all child processes have exited before exiting, so when the script
# ends, we can be sure all started programs have finished.
#
set -e
script_status="running"
create_pipe(){
local pipe=$(mktemp -u)
mkfifo -m 600 "$pipe"
echo $pipe
}
remove_pipe(){
rm -f $1
}
wait_for_stdin_close(){
while read line ; do
:
done
}
wait_for_pids_to_exit(){
pids="$@"
for pid in $pids; do
while kill -0 $pid 2>/dev/null; do
sleep 0.1
done
done
}
shutdown(){
local my_pid=$1
local program_pid=$2
if [ $script_status = "running" ]; then
script_status="shutting down"
# Kill this script's process group
kill -TERM $(($my_pid * -1)) 2>/dev/null
fi
exit 0
}
# Start the program in a subshell so we can wait until it ends and then kill
# this wrapper script. In order to communicate the pid up to the parent process
# we need to use a fifo pipe.
my_pid=$$
pid_pipe=$(create_pipe)
trap 'remove_pipe "$pid_pipe"' EXIT
(
"$@" &
echo $! >> $pid_pipe
wait 2>/dev/null
kill $my_pid
) &
read program_pid < "$pid_pipe"
echo "PID: $program_pid"
trap 'shutdown $my_pid $program_pid' INT HUP TERM
remove_pipe $pid_pipe
# Start shutdown process if stdin is closed
wait_for_stdin_close
shutdown $my_pid $program_pid