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

Кажется, что нет встроенного способа сделать это. Итак, я написал небольшой скрипт, который выполняет эту работу.

#!/bin/bash -e

NEW_DEPS=$(comm -23 <(xargs -n1 <<< "$@" | sort) <(apt-mark showmanual | sort))

apt install $NEW_DEPS
apt-mark auto $NEW_DEPS

Сначала он отфильтровывает все пакеты, которые уже установлены вручную, а затем устанавливает остальные, после чего они автоматически устанавливаются.

Обычно я использую это для временной установки зависимостей сборки. Предположим, мне нужны пакеты A, B и C, чтобы создать что-то и иметь выше скрипта, доступного как autoinstall. Затем я смогу использовать следующую процедуру, чтобы сохранить зависимости сборки от моей системы после сборки.

sudo autoinstall A B C
# build stuff...
sudo apt autoremove
5
задан 6 June 2012 в 14:31

24 ответа

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

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
1
ответ дан 25 July 2018 в 18:38

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

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

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

3
ответ дан 25 July 2018 в 18:38

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

Сделайте сценарий Upstart в /etc/init/skype-killer.conf. Замените skype двоичным именем Skype, если его не skype, и замените 500000 (как в 500000 кБ = 500 М) лимитом в kB, который вы хотите установить для размера виртуальной памяти 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
5
ответ дан 25 July 2018 в 18:38

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

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
1
ответ дан 31 July 2018 в 12:30

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

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

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

3
ответ дан 31 July 2018 в 12:30

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

Сделайте сценарий Upstart в /etc/init/skype-killer.conf. Замените skype двоичным именем Skype, если его не skype, и замените 500000 (как в 500000 кБ = 500 М) лимитом в kB, который вы хотите установить для размера виртуальной памяти 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
5
ответ дан 31 July 2018 в 12:30

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

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

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

3
ответ дан 2 August 2018 в 00:47

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

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
1
ответ дан 2 August 2018 в 00:47

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

Сделайте сценарий Upstart в /etc/init/skype-killer.conf. Замените skype двоичным именем Skype, если его не skype, и замените 500000 (как в 500000 кБ = 500 М) лимитом в kB, который вы хотите установить для размера виртуальной памяти 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
5
ответ дан 2 August 2018 в 00:47

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

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
1
ответ дан 4 August 2018 в 16:17

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

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

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

3
ответ дан 4 August 2018 в 16:17

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

Сделайте сценарий Upstart в /etc/init/skype-killer.conf. Замените skype двоичным именем Skype, если его не skype, и замените 500000 (как в 500000 кБ = 500 М) лимитом в kB, который вы хотите установить для размера виртуальной памяти 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
5
ответ дан 4 August 2018 в 16:17

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

Сделайте сценарий Upstart в /etc/init/skype-killer.conf. Замените skype двоичным именем Skype, если его не skype, и замените 500000 (как в 500000 кБ = 500 М) лимитом в kB, который вы хотите установить для размера виртуальной памяти 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
5
ответ дан 6 August 2018 в 00:56

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

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
1
ответ дан 6 August 2018 в 00:56

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

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

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

3
ответ дан 6 August 2018 в 00:56

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

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
1
ответ дан 7 August 2018 в 18:22

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

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

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

3
ответ дан 7 August 2018 в 18:22

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

Сделайте сценарий Upstart в /etc/init/skype-killer.conf. Замените skype двоичным именем Skype, если его не skype, и замените 500000 (как в 500000 кБ = 500 М) лимитом в kB, который вы хотите установить для размера виртуальной памяти 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
5
ответ дан 7 August 2018 в 18:22

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

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
1
ответ дан 10 August 2018 в 07:05

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

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

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

3
ответ дан 10 August 2018 в 07:05

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

Сделайте сценарий Upstart в /etc/init/skype-killer.conf. Замените skype двоичным именем Skype, если его не skype, и замените 500000 (как в 500000 кБ = 500 М) лимитом в kB, который вы хотите установить для размера виртуальной памяти 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
5
ответ дан 10 August 2018 в 07:05

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

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
1
ответ дан 15 August 2018 в 19:04

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

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

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

3
ответ дан 15 August 2018 в 19:04

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

Сделайте сценарий Upstart в /etc/init/skype-killer.conf. Замените skype двоичным именем Skype, если его не skype, и замените 500000 (как в 500000 кБ = 500 М) лимитом в kB, который вы хотите установить для размера виртуальной памяти 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
5
ответ дан 15 August 2018 в 19:04
  • 1
    супер полезный скрипт, учитывая, что использование выкидыша "limit rss" сломан, спасибо! – Kevin 3 March 2014 в 09:53

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

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