mirror of
https://github.com/woodchen-ink/docker-firefox.git
synced 2025-07-18 13:52:02 +08:00
Gracefully terminates Firefox.
This commit is contained in:
parent
5d2a1c2e52
commit
cfead8ca3c
@ -28,7 +28,9 @@ RUN \
|
|||||||
add-pkg \
|
add-pkg \
|
||||||
desktop-file-utils \
|
desktop-file-utils \
|
||||||
adwaita-icon-theme \
|
adwaita-icon-theme \
|
||||||
ttf-dejavu
|
ttf-dejavu \
|
||||||
|
# The following package is used to send key presses to the X process.
|
||||||
|
xdotool
|
||||||
|
|
||||||
# Set default settings.
|
# Set default settings.
|
||||||
RUN \
|
RUN \
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e # Exit immediately if a command exits with a non-zero status.
|
||||||
|
set -u # Treat unset variables as an error.
|
||||||
|
|
||||||
export HOME=/config
|
export HOME=/config
|
||||||
mkdir -p /config/profile
|
mkdir -p /config/profile
|
||||||
exec /usr/bin/firefox --profile /config/profile --setDefaultBrowser >> /config/log/firefox/output.log 2>> /config/log/firefox/error.log
|
exec /usr/bin/firefox_wrapper --profile /config/profile --setDefaultBrowser >> /config/log/firefox/output.log 2>> /config/log/firefox/error.log
|
||||||
|
60
rootfs/usr/bin/firefox_wrapper
Executable file
60
rootfs/usr/bin/firefox_wrapper
Executable file
@ -0,0 +1,60 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
#
|
||||||
|
# This small wrapper is used to gracefully terminate Firefox. It prevents
|
||||||
|
# the application to receive termination signals directly. Instead, the wrapper
|
||||||
|
# traps signals and send CTRL+q key presses to Firefox.
|
||||||
|
#
|
||||||
|
|
||||||
|
FF_PID=0
|
||||||
|
|
||||||
|
# Gracefully terminate Firefox. This function is called when this script
|
||||||
|
# receives a termination signal (SIGKILL, SIGINT or SIGQUIT).
|
||||||
|
kill_firefox() {
|
||||||
|
# Gracefully close Firefox.
|
||||||
|
echo "Terminating Firefox..."
|
||||||
|
xdotool key "Escape"
|
||||||
|
xdotool key "ctrl+q"
|
||||||
|
|
||||||
|
# And wait for its termination.
|
||||||
|
if [ "$FF_PID" -ne 0 ]; then
|
||||||
|
wait $FF_PID
|
||||||
|
exit $?
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
trap 'kill_firefox' TERM INT QUIT
|
||||||
|
|
||||||
|
# This function is called when this script exits. It makes sure that Firefox is
|
||||||
|
# fully closed by waiting for all its processes to terminate.
|
||||||
|
exit_wrapper() {
|
||||||
|
echo "Waiting for Firefox to completely terminate..."
|
||||||
|
TIMEOUT=10
|
||||||
|
while firefox_running && [ "$TIMEOUT" -gt 0 ]; do
|
||||||
|
TIMEOUT="$(expr "$TIMEOUT" - 1)"
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "$TIMEOUT" -gt 0 ]; then
|
||||||
|
echo "Firefox terminated."
|
||||||
|
else
|
||||||
|
echo "WARNING: Firefox still not terminated."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
trap 'exit_wrapper' EXIT
|
||||||
|
|
||||||
|
firefox_running() {
|
||||||
|
ps | grep -v grep | grep -q '/usr/lib/firefox'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Make sure to terminate any existing instance.
|
||||||
|
if firefox_running; then
|
||||||
|
kill_firefox
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Start Firefox in background.
|
||||||
|
/usr/bin/firefox "$@" &
|
||||||
|
|
||||||
|
# And wait for its termination.
|
||||||
|
FF_PID=$!
|
||||||
|
wait $FF_PID
|
||||||
|
exit $?
|
Loading…
x
Reference in New Issue
Block a user