Как я могу автоматически убить процесс, когда его использование памяти превышает определенный лимит?

Иногда, когда я запускаю скайп, это на самом деле занимает огромное количество памяти
, что я не могу закрыть его, и все просто отстает, как CRAZY. Но это только иногда
есть команда, которая может отследить скайп, и когда он берет ОГРОМНОЕ количество памяти, убейте его. как то так

track skype when memory exceeds XXXX killall skype
5
задан 6 June 2012 в 13:31

3 ответа

Код Туминоида у меня не работал. Я изменил это следующим образом. Кроме того, я уменьшил порог памяти и время сна.

start on startup
stop on shutdown

script
   while /bin/true; do
       if (pidof skype) 
     then
          test $(cat /proc/`pidof skype`/status | grep "VmSize:" | sed -re s,VmSize:\\s+,, | cut -d" " -f1) -gt 500000 && killall skype
       fi
       sleep 10
  done
end script
0
ответ дан 6 June 2012 в 13:31

Несмотря на то, что может быть смысл устанавливать ограничения заранее, давайте ответим на вопрос OP: -)

Сделайте сценарий Upstart в /etc/init/skype-killer.conf. Замените skype двоичным именем Skype, если оно не skype, и замените 500000 (как в 500000 кБ = 500 М) лимитом в килобайтах, который вы хотите установить для размера виртуальной памяти Skype, и 30 числом секунд между проверками.

Это задание запустится при запуске и продолжит проверку использования памяти Skype. После того, как вы скопировали это в /etc/init с помощью sudo, выполните sudo start skype-killer, чтобы запустить его, или перезагрузите систему. Если вы хотите пересмотреть использование памяти, отредактируйте skype-killer.conf и выполните sudo stop skype-killer; sudo start skype-killer.

start on startup
stop on shutdown

script
  while /bin/true; do
    if $(pidof skype); then
      test $(cat /proc/`pidof skype`/status | grep "VmSize:" | sed -re s,VmSize:\\s+,, | cut -d" " -f1) -gt 500000 && killall skype
    fi
    sleep 30
  done
end script
0
ответ дан 6 June 2012 в 13:31

Самый простой способ - использовать команду bash ulimit, которая сообщает ядру, чтобы оно автоматически уничтожало оболочку (и, следовательно, все ее дочерние процессы), когда использование памяти превышает определенный лимит.

  • Запустите терминал с помощью Ctrl-Alt-T
  • Типа ulimit -v N, чтобы установить предел в килобайтах , например. 256000 для 256 МБ.
  • Запустите Skype с skype

Ядро автоматически убьет Skype, если оно превысит лимит, установленный вами через N. Возможно, вам придется несколько раз поэкспериментировать со значениями N, чтобы установить соответствующий порог, при котором Skype будет уничтожен непосредственно перед тем, как он начнет влиять на вашу систему («зависание»), а не во время нормальной работы.

0
ответ дан 6 June 2012 в 13:31

Другие вопросы по тегам:

Похожие вопросы: