diff options
Diffstat (limited to 'dot')
-rw-r--r-- | dot/local/bin/sliceweasel | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/dot/local/bin/sliceweasel b/dot/local/bin/sliceweasel new file mode 100644 index 0000000..944f12a --- /dev/null +++ b/dot/local/bin/sliceweasel | |||
@@ -0,0 +1,26 @@ | |||
1 | #!/bin/bash | ||
2 | |||
3 | command=iceweasel | ||
4 | memory_ratio=0.5 | ||
5 | control_group=$command | ||
6 | |||
7 | as_root=sudo | ||
8 | |||
9 | total_memory() { free -b | (read line; read Mem total _; echo $total); } | ||
10 | mkdir_idem() { [ -d "$1" ] || $as_root mkdir "$1"; } | ||
11 | out() { $as_root tee "$@" >/dev/null; } | ||
12 | |||
13 | total_memory=$(total_memory) || exit 1 | ||
14 | memory_limit_in_bytes=$(bc -q <<< "$total_memory * $memory_ratio / 1" ) | ||
15 | control_group_dir=/sys/fs/cgroup/memory/"$control_group" | ||
16 | |||
17 | mkdir_idem "$control_group_dir" | ||
18 | out "$control_group_dir"/memory.limit_in_bytes <<< $memory_limit_in_bytes | ||
19 | |||
20 | # This method works (tested). | ||
21 | # username=$(id -u) | ||
22 | # exec sudo -E -- cgexec -g memory:"$control_group" -- su "$username" -c "exec $command" | ||
23 | |||
24 | # This method is untested. Should work the same. | ||
25 | out "$control_group_dir"/cgroup.procs <<< $$ | ||
26 | exec $command | ||