106 lines
2.0 KiB
Bash
106 lines
2.0 KiB
Bash
#!/usr/bin/env bash
|
|
# Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
set -eu
|
|
|
|
UNAMEOS="$(uname -s)"
|
|
ADDRESS="127.0.0.1"
|
|
PORT="8000"
|
|
URL="http://$ADDRESS:$PORT/GPUDumpViewer.html"
|
|
|
|
SCRIPT=$(readlink -f "$0")
|
|
# Absolute path this script is in, thus /home/user/bin
|
|
SCRIPTPATH=$(dirname "$SCRIPT")
|
|
|
|
pushd "$SCRIPTPATH"
|
|
|
|
|
|
GetAllChildProcesses() {
|
|
local Children=$(ps -o pid= ppid "$1")
|
|
|
|
for PID in $Children
|
|
do
|
|
GetAllChildProcesses "$PID"
|
|
done
|
|
|
|
echo "$Children"
|
|
}
|
|
|
|
# Gather all the descendant children of this process, and first kill -TERM. If any child process
|
|
# is still alive finally send a -KILL
|
|
TermHandler() {
|
|
MaxWait=30
|
|
CurrentWait=0
|
|
|
|
ProcessesToKill=$(GetAllChildProcesses $$)
|
|
kill -s TERM $ProcessesToKill 2> /dev/null
|
|
|
|
ProcessesStillAlive=$(ps -o pid= -p $ProcessesToKill)
|
|
|
|
# Wait until all the processes have been gracefully killed, or max Wait time
|
|
while [ -n "$ProcessesStillAlive" ] && [ "$CurrentWait" -lt "$MaxWait" ]
|
|
do
|
|
CurrentWait=$((CurrentWait + 1))
|
|
sleep 1
|
|
|
|
ProcessesStillAlive=$(ps -o pid= -p $ProcessesToKill)
|
|
done
|
|
|
|
# If some processes are still alive after MaxWait, lets just force kill them
|
|
if [ -n "$ProcessesStillAlive" ]; then
|
|
kill -s KILL $ProcessesStillAlive 2> /dev/null
|
|
fi
|
|
}
|
|
|
|
# trap when SIGINT or SIGTERM are received with a custom function
|
|
trap TermHandler SIGTERM SIGINT
|
|
|
|
APPS=()
|
|
APPS+=(xdg-open)
|
|
|
|
if [[ "${UNAMEOS}" =~ "Darwin" ]]; then
|
|
APPS+=(open)
|
|
fi
|
|
|
|
CMD=
|
|
for val in "${APPS[@]}"; do
|
|
CMD="$(command -v "${val}")" || true
|
|
if [[ -n "${CMD}" ]]; then
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [[ -z "${CMD}" ]]; then
|
|
echo "ERROR: Browser launch command not found"
|
|
exit 1
|
|
fi
|
|
|
|
ARGS=("${CMD}")
|
|
|
|
ARGS+=("$URL")
|
|
|
|
echo "Executing:"
|
|
echo
|
|
|
|
echo "Starting simple webserver..."
|
|
exec python3 -m http.server "$PORT" --bind "$ADDRESS" &
|
|
P1=$!
|
|
sleep 1
|
|
|
|
echo "${ARGS[0]} \\"
|
|
for ((i=1; i < ${#ARGS[@]}; i++ )); do
|
|
echo " ${ARGS[$i]} \\";
|
|
done
|
|
echo
|
|
|
|
# Start the browser now that the server is running
|
|
"${ARGS[@]}"
|
|
|
|
# Wait on the webserver - in general this will be killed by a Ctrl-C
|
|
wait $P1
|
|
|
|
echo
|
|
echo "Closing ${CMD}..."
|
|
|
|
popd
|