Это можно сделать с помощью утилиты crontab.
Создайте в нем файл с этим скриптом. измените имя программы, которую вы хотите контролировать.
сохраните файл, допустим, вы назовете его script.sh
#!/bin/sh
MAX_THREADS=60
PROGRAM_NAME="firefox"
PID=$(ps -A | grep $PROGRAM_NAME | sed 's/\([0-9]*\).*/\1/')
CUR_NO_THREADS=$(cat /proc/"$PID"/status | grep Threads | tr -dc '0-9');
if [ "CUR_NO_THREADS" -ge "$MAX_THREADS" ];
then
killall $PROGRAM_NAME;
$PROGRAM_NAME;
fi;
теперь запускайте crontab как
sudo crontab -e
это откроет вам файл в vim или nano поместите это в этот файл
0 * * * * /path/to/script/script.sh
Благодаря @icarus я понял, что мой домашний каталог, в отличие от моего коллеги -рабочих, монтируется из зашифрованного раздела ecryptfs, для которого установлен флаг nosuid
. (Очевидно, чтобы закрыть дыру в безопасности).
Это предотвратит срабатывание бита sgid. Если я переведу свою программу в /usr/local/bin
, у которой нет флага nosuid
, она правильно сообщит об эффективной группе.
На данный момент мне нужен хороший ответ на вопрос о ecryptfs и nosuid .