2023-11-15 19:37:58 +01:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
if [ -z "$CPUSPEC" ] || [ "$#" -lt 1 ]; then
|
|
|
|
echo "usage: CPUSPEC=... $0 command"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2023-11-16 16:10:46 +01:00
|
|
|
ARGS="$@"
|
|
|
|
|
2023-11-15 19:37:58 +01:00
|
|
|
set +e
|
|
|
|
|
2023-11-16 14:37:58 +01:00
|
|
|
if type systemd-run >/dev/null 2>&1 ; then # systemd
|
|
|
|
sudo systemd-run -G --pty -d --uid=$(whoami) \
|
|
|
|
-p AllowedCPUs="$CPUSPEC" \
|
|
|
|
--slice "user-$(whoami).slice" \
|
|
|
|
"$@"
|
|
|
|
elif type loginctl >/dev/null 2>&1 ; then #elogind
|
|
|
|
sudo mkdir /sys/fs/cgroup/jhalfs
|
|
|
|
sudo sh -c "echo +cpuset > /sys/fs/cgroup/cgroup.subtree_control"
|
|
|
|
(
|
|
|
|
sudo sh -c "echo $BASHPID > /sys/fs/cgroup/jhalfs/cgroup.procs"
|
2023-11-16 16:10:46 +01:00
|
|
|
sudo sh -c "
|
2023-11-16 14:37:58 +01:00
|
|
|
SESS_CGROUP=/sys/fs/cgroup/\$XDG_SESSION_ID
|
2023-11-16 16:10:46 +01:00
|
|
|
echo $CPUSPEC > \$SESS_CGROUP/cpuset.cpus
|
|
|
|
( echo \$BASHPID > \$SESS_CGROUP/cgroup.procs &&
|
|
|
|
exec sudo -u $(whoami) $ARGS )"
|
2023-11-16 14:37:58 +01:00
|
|
|
)
|
|
|
|
sudo rmdir /sys/fs/cgroup/jhalfs
|
|
|
|
else # no session manager
|
|
|
|
sudo mkdir /sys/fs/cgroup/jhalfs
|
|
|
|
sudo sh -c "echo +cpuset > /sys/fs/cgroup/cgroup.subtree_control"
|
|
|
|
sudo sh -c "echo \"$CPUSPEC\" > /sys/fs/cgroup/jhalfs/cpuset.cpus"
|
|
|
|
(sudo sh -c "echo $BASHPID > /sys/fs/cgroup/jhalfs/cgroup.procs" &&
|
|
|
|
exec "$@")
|
|
|
|
sudo rmdir /sys/fs/cgroup/jhalfs
|
2023-11-15 19:37:58 +01:00
|
|
|
fi
|