From 07d4f9c7df8d226ce77b9cf8e81432530f8a1cb4 Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Tue, 29 Nov 2022 12:31:17 -0500 Subject: rename ioslay-mgr.sh; test write ops --- src/firefox-io-slayer | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/ioslay-mgr.sh | 105 -------------------------------------------------- 2 files changed, 105 insertions(+), 105 deletions(-) create mode 100755 src/firefox-io-slayer delete mode 100755 src/ioslay-mgr.sh (limited to 'src') diff --git a/src/firefox-io-slayer b/src/firefox-io-slayer new file mode 100755 index 0000000..56ab849 --- /dev/null +++ b/src/firefox-io-slayer @@ -0,0 +1,105 @@ +#!/bin/bash + +UNIT_NAME=ioslay +if [ "$1" = launch-unit ] +then + if systemctl --user is-active "$UNIT_NAME" + then systemctl --user restart "$UNIT_NAME" + else systemd-run --user -u "$UNIT_NAME" "$0" + fi + exit +fi + +if [ -e /usr/lib/bash/sleep ] +then + enable -f /usr/lib/bash/sleep sleep +fi + +export NOTICE=y +noticeLOG() { [ "$NOTICE" ] || return; echo "Notice: $*" >&2; } +debugLOG() { [ "$DBG" ] || return; echo "Debug: $*" >&2; } + +. sliceweasel.lib.sh + +vkill() +{ + if [ $# = 0 ] + then + return + fi + ( + if [ "$(id -u)" = 0 ] + then sudo= + else sudo=sudo + fi + set -x + ps u "$@" + $sudo kill "$@" + ) +} + +slay_slayer() +{ + if [ "$ioslay" ] + then + children=$(for pid in $ioslay; do pgrep -P $ioslay; done) + grandchildren=$(for pid in $children; do pgrep -P $pid; done) + vkill $ioslay $children $grandchildren + fi +} + +GROUP_BASENAME=firefox + +group_procs=$(get_firefox_cgroup_procs) + +ioslay= +lastprocs= +SIGNALLED= +trap 'SIGNALLED=y' SIGINT SIGTERM SIGHUP +while [ ! "$SIGNALLED" ] +do + if ! [ -e "$group_procs" ] + then + [ "$warned" ] || echo "Warning: firefox not running or cgroup not found" >&2 + warned=y + else + if [ "$warned" ] + then + echo "Found firefox cgroup: $group_procs" >&2 + warned= + fi + read -N 1000100 procs < "$group_procs" + if [ "$procs" ] + then + set -- + for pid in $procs + do + read comm < /proc/$pid/comm + case "$comm" in + 'Isolated Web Content' | 'Web Content' | 'Isolated Web Co') + set -- "$@" "$pid" + debugLOG "accept /proc/$pid/comm $comm" + ;; + *) + debugLOG "reject /proc/$pid/comm $comm" + esac + done + + # echo "pids: ($*|$(echo $procs))" >&2 + if [ "$lastargs" != "$*" ] + then + slay_slayer + wait $ioslay + if [ $# -gt 0 ] + then + ioslay-firefox "$@" & + ioslay=$! + noticeLOG "Launched ioslay-firefox[$ioslay] $*" + fi + fi + lastargs=$* + fi + fi + sleep 1 +done +slay_slayer diff --git a/src/ioslay-mgr.sh b/src/ioslay-mgr.sh deleted file mode 100755 index 56ab849..0000000 --- a/src/ioslay-mgr.sh +++ /dev/null @@ -1,105 +0,0 @@ -#!/bin/bash - -UNIT_NAME=ioslay -if [ "$1" = launch-unit ] -then - if systemctl --user is-active "$UNIT_NAME" - then systemctl --user restart "$UNIT_NAME" - else systemd-run --user -u "$UNIT_NAME" "$0" - fi - exit -fi - -if [ -e /usr/lib/bash/sleep ] -then - enable -f /usr/lib/bash/sleep sleep -fi - -export NOTICE=y -noticeLOG() { [ "$NOTICE" ] || return; echo "Notice: $*" >&2; } -debugLOG() { [ "$DBG" ] || return; echo "Debug: $*" >&2; } - -. sliceweasel.lib.sh - -vkill() -{ - if [ $# = 0 ] - then - return - fi - ( - if [ "$(id -u)" = 0 ] - then sudo= - else sudo=sudo - fi - set -x - ps u "$@" - $sudo kill "$@" - ) -} - -slay_slayer() -{ - if [ "$ioslay" ] - then - children=$(for pid in $ioslay; do pgrep -P $ioslay; done) - grandchildren=$(for pid in $children; do pgrep -P $pid; done) - vkill $ioslay $children $grandchildren - fi -} - -GROUP_BASENAME=firefox - -group_procs=$(get_firefox_cgroup_procs) - -ioslay= -lastprocs= -SIGNALLED= -trap 'SIGNALLED=y' SIGINT SIGTERM SIGHUP -while [ ! "$SIGNALLED" ] -do - if ! [ -e "$group_procs" ] - then - [ "$warned" ] || echo "Warning: firefox not running or cgroup not found" >&2 - warned=y - else - if [ "$warned" ] - then - echo "Found firefox cgroup: $group_procs" >&2 - warned= - fi - read -N 1000100 procs < "$group_procs" - if [ "$procs" ] - then - set -- - for pid in $procs - do - read comm < /proc/$pid/comm - case "$comm" in - 'Isolated Web Content' | 'Web Content' | 'Isolated Web Co') - set -- "$@" "$pid" - debugLOG "accept /proc/$pid/comm $comm" - ;; - *) - debugLOG "reject /proc/$pid/comm $comm" - esac - done - - # echo "pids: ($*|$(echo $procs))" >&2 - if [ "$lastargs" != "$*" ] - then - slay_slayer - wait $ioslay - if [ $# -gt 0 ] - then - ioslay-firefox "$@" & - ioslay=$! - noticeLOG "Launched ioslay-firefox[$ioslay] $*" - fi - fi - lastargs=$* - fi - fi - sleep 1 -done -slay_slayer -- cgit v1.2.3