tv xkiller: init
This commit is contained in:
parent
7c84b32f2d
commit
e0bbedff27
25
tv/5pkgs/simple/xkiller.nix
Normal file
25
tv/5pkgs/simple/xkiller.nix
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{ pkgs }:
|
||||||
|
pkgs.writeDash "xkiller" ''
|
||||||
|
set -efu
|
||||||
|
exec >&2
|
||||||
|
${pkgs.iproute}/bin/ss -lp src unix:/tmp/.X11-unix/X* |
|
||||||
|
${pkgs.gnused}/bin/sed -n '
|
||||||
|
s|.*/tmp/.X11-unix/X\([0-9]\+\)\>.*("X[^"]*",pid=\([0-9]\+\)\>.*|\1 \2|p
|
||||||
|
' |
|
||||||
|
while read -r display pid; do
|
||||||
|
{
|
||||||
|
exit_code=$(
|
||||||
|
DISPLAY=:$display ${pkgs.coreutils}/bin/timeout 1 \
|
||||||
|
${pkgs.xorg.xset}/bin/xset q >/dev/null 2>&1 &&
|
||||||
|
echo 0 || echo $?
|
||||||
|
)
|
||||||
|
if test $exit_code = 124; then
|
||||||
|
echo "X on display :$display is locked up; killing PID $pid..."
|
||||||
|
${pkgs.coreutils}/bin/kill -SIGKILL "$pid"
|
||||||
|
else
|
||||||
|
echo "X on display :$display is healthy"
|
||||||
|
fi
|
||||||
|
} &
|
||||||
|
done
|
||||||
|
wait
|
||||||
|
''
|
Loading…
Reference in New Issue
Block a user