Автоматически убивать процесс, если он превышает заданный объем ОЗУ

Вы можете использовать «цикл цикла»:

for FILE in 'file-list'
do
  echo "$FILE"
  mv "$FILE" /your/destination/
done

Объяснение:

'file-list' следует заменить на метод, чтобы получить список файлов, которые вы хотите использовать. Например, $(cat files.txt), если у вас уже есть список в файле, pattern*, если файлы в вашем каталоге начинаются с того же шаблона или $(find -iname "*pattern*"), если вы хотите использовать find для получения списка. Выход будет сохранен в переменной FILE один элемент за другим. Команды между do и done выполняются для каждого элемента. Вы можете использовать echo "$FILE", чтобы проверить, соответствует ли ваша команда правильным файлам перед добавлением команды mv в цикл.

10
задан 27 July 2011 в 22:04

24 ответа

Попробуйте инструмент prlimit из пакета util-linux. Он запускает программу с ограничениями ресурсов. Он использует системный вызов prlimit для настройки пределов, которые затем принудительно применяются только ядром.

Вы можете настроить 16 пределов, в том числе:

максимальное количество процессорного времени в секундах Максимальное количество пользовательских процессов Максимальный размер резидентного набора («используемая память») Максимальный размер процесса может блокировать объем памяти виртуальной памяти Максимальное количество открытых файлов Максимальное количество блокировок файлов Максимальное количество ожидающих сигналов Максимальные байты в очередях сообщений POSIX
2
ответ дан 25 July 2018 в 21:32

Ненавижу быть парнем, который отвечает на свой вопрос, но сегодня утром я нашел альтернативный метод, завернутый в небольшую полезность. Это будет ограничено потреблением процессора или памяти:

https://github.com/pshved/timeout

Я сначала делаю этот снимок, но выдвигаю предложение Amey Jah для хороший ответ. Я проверю, не справится ли это с этим.

7
ответ дан 25 July 2018 в 21:32

Я бы настоятельно советовал не делать этого. Как было предложено @chrisamiller, установка ulimit ограничивает RAM доступной с процессом.

Но если вы настаиваете, то следуйте этой процедуре.

Сохраните следующий сценарий как killif.sh: #!/bin/sh if [ $# -ne 2 ]; then echo "Invalid number of arguments" exit 0 fi while true; do SIZE=$(pmap $1|grep total|grep -o "[0-9]*") SIZE=${SIZE%%K*} SIZEMB=$((SIZE/1024)) echo "Process id =$1 Size = $SIZEMB MB" if [ $SIZEMB -gt $2 ]; then printf "SIZE has exceeded.\nKilling the process......" kill -9 "$1" echo "Killed the process" exit 0 else echo "SIZE has not yet exceeding" fi sleep 10 done Теперь сделайте его исполняемым. chmod +x killif.sh Теперь запустите этот скрипт на терминале. Замените PROCID фактическим идентификатором процесса и SIZE с размером в МБ. ./killif.sh PROCID SIZE Например: ./killif.sh 132451 100 Если SIZE равно 100, тогда процесс будет убит, если его использование ОЗУ превысит 100 МБ.

Я бы настоятельно советовал не делать этого Вы знаете, что вы пытаетесь сделать. Процесс убийства - это не очень хорошая идея. Если в этом процессе есть команда остановки или остановки, отредактируйте скрипт и замените команду kill -9 командой shutdown.

7
ответ дан 25 July 2018 в 21:32
  • 1
    Я исправил форматирование кода для вас. – Nathan Osman 28 July 2011 в 00:08
  • 2
    я бы подумал о том, чтобы немного спать там, например, спать 0,5 ... – Denwerko 28 July 2011 в 00:32
  • 3
    @George Edison. Как вы это сделали. Когда я пытался вставить, это дало мне странно отформатированный текст. Денверко: Где бы вы хотели спать. Я уже спал 10 секунд в цикле while – Amey Jah 28 July 2011 в 20:21
  • 4
    Спасибо за решение, как указано ниже, я могу проверить это. Почему все ужасные предупреждения об убийствах? Программное обеспечение для управления кластерами (LSF, PBS и др.) Делает это все время, когда процесс превышает количество ресурсов, которые он запрашивал, без каких-либо ужасных последствий. Я согласен с тем, что это нехорошее решение для новых пользователей, которые могут ошибочно их использовать, но при правильных обстоятельствах это может быть весьма полезным. – chrisamiller 28 July 2011 в 23:49
  • 5
    Можете ли вы рассказать о том, почему бы не сделать это? – jterm 13 July 2017 в 16:49

Попробуйте инструмент prlimit из пакета util-linux. Он запускает программу с ограничениями ресурсов. Он использует системный вызов prlimit для настройки пределов, которые затем принудительно применяются только ядром.

Вы можете настроить 16 пределов, в том числе:

максимальное количество процессорного времени в секундах Максимальное количество пользовательских процессов Максимальный размер резидентного набора («используемая память») Максимальный размер процесса может блокировать объем памяти виртуальной памяти Максимальное количество открытых файлов Максимальное количество блокировок файлов Максимальное количество ожидающих сигналов Максимальные байты в очередях сообщений POSIX
2
ответ дан 31 July 2018 в 10:50

Ненавижу быть парнем, который отвечает на свой вопрос, но сегодня утром я нашел альтернативный метод, завернутый в небольшую полезность. Это будет ограничено потреблением процессора или памяти:

https://github.com/pshved/timeout

Я сначала делаю этот снимок, но выдвигаю предложение Amey Jah для хороший ответ. Я проверю, не справится ли это с этим.

7
ответ дан 31 July 2018 в 10:50

Я бы настоятельно советовал не делать этого. Как было предложено @chrisamiller, установка ulimit ограничивает RAM доступной с процессом.

Но если вы настаиваете, то следуйте этой процедуре.

Сохраните следующий сценарий как killif.sh: #!/bin/sh if [ $# -ne 2 ]; then echo "Invalid number of arguments" exit 0 fi while true; do SIZE=$(pmap $1|grep total|grep -o "[0-9]*") SIZE=${SIZE%%K*} SIZEMB=$((SIZE/1024)) echo "Process id =$1 Size = $SIZEMB MB" if [ $SIZEMB -gt $2 ]; then printf "SIZE has exceeded.\nKilling the process......" kill -9 "$1" echo "Killed the process" exit 0 else echo "SIZE has not yet exceeding" fi sleep 10 done Теперь сделайте его исполняемым. chmod +x killif.sh Теперь запустите этот скрипт на терминале. Замените PROCID фактическим идентификатором процесса и SIZE с размером в МБ. ./killif.sh PROCID SIZE Например: ./killif.sh 132451 100 Если SIZE равно 100, тогда процесс будет убит, если его использование ОЗУ превысит 100 МБ.

Я бы настоятельно советовал не делать этого Вы знаете, что вы пытаетесь сделать. Процесс убийства - это не очень хорошая идея. Если в этом процессе есть команда остановки или остановки, отредактируйте скрипт и замените команду kill -9 командой shutdown.

7
ответ дан 31 July 2018 в 10:50
  • 1
    Я исправил форматирование кода для вас. – Nathan Osman 28 July 2011 в 00:08
  • 2
    я бы подумал о том, чтобы немного спать там, например, спать 0,5 ... – Denwerko 28 July 2011 в 00:32
  • 3
    @George Edison. Как вы это сделали. Когда я пытался вставить, это дало мне странно отформатированный текст. Денверко: Где бы вы хотели спать. Я уже спал 10 секунд в цикле while – Amey Jah 28 July 2011 в 20:21
  • 4
    Спасибо за решение, как указано ниже, я могу проверить это. Почему все ужасные предупреждения об убийствах? Программное обеспечение для управления кластерами (LSF, PBS и др.) Делает это все время, когда процесс превышает количество ресурсов, которые он запрашивал, без каких-либо ужасных последствий. Я согласен с тем, что это нехорошее решение для новых пользователей, которые могут ошибочно их использовать, но при правильных обстоятельствах это может быть весьма полезным. – chrisamiller 28 July 2011 в 23:49
  • 5
    Можете ли вы рассказать о том, почему бы не сделать это? – jterm 13 July 2017 в 16:49

Попробуйте инструмент prlimit из пакета util-linux. Он запускает программу с ограничениями ресурсов. Он использует системный вызов prlimit для настройки пределов, которые затем принудительно применяются только ядром.

Вы можете настроить 16 пределов, в том числе:

максимальное количество процессорного времени в секундах Максимальное количество пользовательских процессов Максимальный размер резидентного набора («используемая память») Максимальный размер процесса может блокировать объем памяти виртуальной памяти Максимальное количество открытых файлов Максимальное количество блокировок файлов Максимальное количество ожидающих сигналов Максимальные байты в очередях сообщений POSIX
2
ответ дан 31 July 2018 в 10:55

Ненавижу быть парнем, который отвечает на свой вопрос, но сегодня утром я нашел альтернативный метод, завернутый в небольшую полезность. Это будет ограничено потреблением процессора или памяти:

https://github.com/pshved/timeout

Я сначала делаю этот снимок, но выдвигаю предложение Amey Jah для хороший ответ. Я проверю, не справится ли это с этим.

7
ответ дан 31 July 2018 в 10:55

Я бы настоятельно советовал не делать этого. Как было предложено @chrisamiller, установка ulimit ограничивает RAM доступной с процессом.

Но если вы настаиваете, то следуйте этой процедуре.

Сохраните следующий сценарий как killif.sh: #!/bin/sh if [ $# -ne 2 ]; then echo "Invalid number of arguments" exit 0 fi while true; do SIZE=$(pmap $1|grep total|grep -o "[0-9]*") SIZE=${SIZE%%K*} SIZEMB=$((SIZE/1024)) echo "Process id =$1 Size = $SIZEMB MB" if [ $SIZEMB -gt $2 ]; then printf "SIZE has exceeded.\nKilling the process......" kill -9 "$1" echo "Killed the process" exit 0 else echo "SIZE has not yet exceeding" fi sleep 10 done Теперь сделайте его исполняемым. chmod +x killif.sh Теперь запустите этот скрипт на терминале. Замените PROCID фактическим идентификатором процесса и SIZE с размером в МБ. ./killif.sh PROCID SIZE Например: ./killif.sh 132451 100 Если SIZE равно 100, тогда процесс будет убит, если его использование ОЗУ превысит 100 МБ.

Я бы настоятельно советовал не делать этого Вы знаете, что вы пытаетесь сделать. Процесс убийства - это не очень хорошая идея. Если в этом процессе есть команда остановки или остановки, отредактируйте скрипт и замените команду kill -9 командой shutdown.

7
ответ дан 31 July 2018 в 10:55
  • 1
    Я исправил форматирование кода для вас. – Nathan Osman 28 July 2011 в 00:08
  • 2
    я бы подумал о том, чтобы немного спать там, например, спать 0,5 ... – Denwerko 28 July 2011 в 00:32
  • 3
    @George Edison. Как вы это сделали. Когда я пытался вставить, это дало мне странно отформатированный текст. Денверко: Где бы вы хотели спать. Я уже спал 10 секунд в цикле while – Amey Jah 28 July 2011 в 20:21
  • 4
    Спасибо за решение, как указано ниже, я могу проверить это. Почему все ужасные предупреждения об убийствах? Программное обеспечение для управления кластерами (LSF, PBS и др.) Делает это все время, когда процесс превышает количество ресурсов, которые он запрашивал, без каких-либо ужасных последствий. Я согласен с тем, что это нехорошее решение для новых пользователей, которые могут ошибочно их использовать, но при правильных обстоятельствах это может быть весьма полезным. – chrisamiller 28 July 2011 в 23:49
  • 5
    Можете ли вы рассказать о том, почему бы не сделать это? – jterm 13 July 2017 в 16:49

Попробуйте инструмент prlimit из пакета util-linux. Он запускает программу с ограничениями ресурсов. Он использует системный вызов prlimit для настройки пределов, которые затем принудительно применяются только ядром.

Вы можете настроить 16 пределов, в том числе:

максимальное количество процессорного времени в секундах Максимальное количество пользовательских процессов Максимальный размер резидентного набора («используемая память») Максимальный размер процесса может блокировать объем памяти виртуальной памяти Максимальное количество открытых файлов Максимальное количество блокировок файлов Максимальное количество ожидающих сигналов Максимальные байты в очередях сообщений POSIX
2
ответ дан 31 July 2018 в 11:54

Ненавижу быть парнем, который отвечает на свой вопрос, но сегодня утром я нашел альтернативный метод, завернутый в небольшую полезность. Это будет ограничено потреблением процессора или памяти:

https://github.com/pshved/timeout

Я сначала делаю этот снимок, но выдвигаю предложение Amey Jah для хороший ответ. Я проверю, не справится ли это с этим.

7
ответ дан 31 July 2018 в 11:54

Я бы настоятельно советовал не делать этого. Как было предложено @chrisamiller, установка ulimit ограничивает RAM доступной с процессом.

Но если вы настаиваете, то следуйте этой процедуре.

Сохраните следующий сценарий как killif.sh: #!/bin/sh if [ $# -ne 2 ]; then echo "Invalid number of arguments" exit 0 fi while true; do SIZE=$(pmap $1|grep total|grep -o "[0-9]*") SIZE=${SIZE%%K*} SIZEMB=$((SIZE/1024)) echo "Process id =$1 Size = $SIZEMB MB" if [ $SIZEMB -gt $2 ]; then printf "SIZE has exceeded.\nKilling the process......" kill -9 "$1" echo "Killed the process" exit 0 else echo "SIZE has not yet exceeding" fi sleep 10 done Теперь сделайте его исполняемым. chmod +x killif.sh Теперь запустите этот скрипт на терминале. Замените PROCID фактическим идентификатором процесса и SIZE с размером в МБ. ./killif.sh PROCID SIZE Например: ./killif.sh 132451 100 Если SIZE равно 100, тогда процесс будет убит, если его использование ОЗУ превысит 100 МБ.

Я бы настоятельно советовал не делать этого Вы знаете, что вы пытаетесь сделать. Процесс убийства - это не очень хорошая идея. Если в этом процессе есть команда остановки или остановки, отредактируйте скрипт и замените команду kill -9 командой shutdown.

7
ответ дан 31 July 2018 в 11:54
  • 1
    Я исправил форматирование кода для вас. – Nathan Osman 28 July 2011 в 00:08
  • 2
    я бы подумал о том, чтобы немного спать там, например, спать 0,5 ... – Denwerko 28 July 2011 в 00:32
  • 3
    @George Edison. Как вы это сделали. Когда я пытался вставить, это дало мне странно отформатированный текст. Денверко: Где бы вы хотели спать. Я уже спал 10 секунд в цикле while – Amey Jah 28 July 2011 в 20:21
  • 4
    Спасибо за решение, как указано ниже, я могу проверить это. Почему все ужасные предупреждения об убийствах? Программное обеспечение для управления кластерами (LSF, PBS и др.) Делает это все время, когда процесс превышает количество ресурсов, которые он запрашивал, без каких-либо ужасных последствий. Я согласен с тем, что это нехорошее решение для новых пользователей, которые могут ошибочно их использовать, но при правильных обстоятельствах это может быть весьма полезным. – chrisamiller 28 July 2011 в 23:49
  • 5
    Можете ли вы рассказать о том, почему бы не сделать это? – jterm 13 July 2017 в 16:49

Попробуйте инструмент prlimit из пакета util-linux. Он запускает программу с ограничениями ресурсов. Он использует системный вызов prlimit для настройки пределов, которые затем принудительно применяются только ядром.

Вы можете настроить 16 пределов, в том числе:

максимальное количество процессорного времени в секундах Максимальное количество пользовательских процессов Максимальный размер резидентного набора («используемая память») Максимальный размер процесса может блокировать объем памяти виртуальной памяти Максимальное количество открытых файлов Максимальное количество блокировок файлов Максимальное количество ожидающих сигналов Максимальные байты в очередях сообщений POSIX
2
ответ дан 2 August 2018 в 03:10

Ненавижу быть парнем, который отвечает на свой вопрос, но сегодня утром я нашел альтернативный метод, завернутый в небольшую полезность. Это будет ограничено потреблением процессора или памяти:

https://github.com/pshved/timeout

Я сначала делаю этот снимок, но выдвигаю предложение Amey Jah для хороший ответ. Я проверю, не справится ли это с этим.

7
ответ дан 2 August 2018 в 03:10

Я бы настоятельно советовал не делать этого. Как было предложено @chrisamiller, установка ulimit ограничивает RAM доступной с процессом.

Но если вы настаиваете, то следуйте этой процедуре.

Сохраните следующий сценарий как killif.sh: #!/bin/sh if [ $# -ne 2 ]; then echo "Invalid number of arguments" exit 0 fi while true; do SIZE=$(pmap $1|grep total|grep -o "[0-9]*") SIZE=${SIZE%%K*} SIZEMB=$((SIZE/1024)) echo "Process id =$1 Size = $SIZEMB MB" if [ $SIZEMB -gt $2 ]; then printf "SIZE has exceeded.\nKilling the process......" kill -9 "$1" echo "Killed the process" exit 0 else echo "SIZE has not yet exceeding" fi sleep 10 done Теперь сделайте его исполняемым. chmod +x killif.sh Теперь запустите этот скрипт на терминале. Замените PROCID фактическим идентификатором процесса и SIZE с размером в МБ. ./killif.sh PROCID SIZE Например: ./killif.sh 132451 100 Если SIZE равно 100, тогда процесс будет убит, если его использование ОЗУ превысит 100 МБ.

Я бы настоятельно советовал не делать этого Вы знаете, что вы пытаетесь сделать. Процесс убийства - это не очень хорошая идея. Если в этом процессе есть команда остановки или остановки, отредактируйте скрипт и замените команду kill -9 командой shutdown.

7
ответ дан 2 August 2018 в 03:10
  • 1
    Я исправил форматирование кода для вас. – Nathan Osman 28 July 2011 в 00:08
  • 2
    я бы подумал о том, чтобы немного спать там, например, спать 0,5 ... – Denwerko 28 July 2011 в 00:32
  • 3
    @George Edison. Как вы это сделали. Когда я пытался вставить, это дало мне странно отформатированный текст. Денверко: Где бы вы хотели спать. Я уже спал 10 секунд в цикле while – Amey Jah 28 July 2011 в 20:21
  • 4
    Спасибо за решение, как указано ниже, я могу проверить это. Почему все ужасные предупреждения об убийствах? Программное обеспечение для управления кластерами (LSF, PBS и др.) Делает это все время, когда процесс превышает количество ресурсов, которые он запрашивал, без каких-либо ужасных последствий. Я согласен с тем, что это нехорошее решение для новых пользователей, которые могут ошибочно их использовать, но при правильных обстоятельствах это может быть весьма полезным. – chrisamiller 28 July 2011 в 23:49
  • 5
    Можете ли вы рассказать о том, почему бы не сделать это? – jterm 13 July 2017 в 16:49

Попробуйте инструмент prlimit из пакета util-linux. Он запускает программу с ограничениями ресурсов. Он использует системный вызов prlimit для настройки пределов, которые затем принудительно применяются только ядром.

Вы можете настроить 16 пределов, в том числе:

максимальное количество процессорного времени в секундах Максимальное количество пользовательских процессов Максимальный размер резидентного набора («используемая память») Максимальный размер процесса может блокировать объем памяти виртуальной памяти Максимальное количество открытых файлов Максимальное количество блокировок файлов Максимальное количество ожидающих сигналов Максимальные байты в очередях сообщений POSIX
2
ответ дан 4 August 2018 в 19:02

Ненавижу быть парнем, который отвечает на свой вопрос, но сегодня утром я нашел альтернативный метод, завернутый в небольшую полезность. Это будет ограничено потреблением процессора или памяти:

https://github.com/pshved/timeout

Я сначала делаю этот снимок, но выдвигаю предложение Amey Jah для хороший ответ. Я проверю, не справится ли это с этим.

7
ответ дан 4 August 2018 в 19:02

Я бы настоятельно советовал не делать этого. Как было предложено @chrisamiller, установка ulimit ограничивает RAM доступной с процессом.

Но если вы настаиваете, то следуйте этой процедуре.

Сохраните следующий сценарий как killif.sh: #!/bin/sh if [ $# -ne 2 ]; then echo "Invalid number of arguments" exit 0 fi while true; do SIZE=$(pmap $1|grep total|grep -o "[0-9]*") SIZE=${SIZE%%K*} SIZEMB=$((SIZE/1024)) echo "Process id =$1 Size = $SIZEMB MB" if [ $SIZEMB -gt $2 ]; then printf "SIZE has exceeded.\nKilling the process......" kill -9 "$1" echo "Killed the process" exit 0 else echo "SIZE has not yet exceeding" fi sleep 10 done Теперь сделайте его исполняемым. chmod +x killif.sh Теперь запустите этот скрипт на терминале. Замените PROCID фактическим идентификатором процесса и SIZE с размером в МБ. ./killif.sh PROCID SIZE Например: ./killif.sh 132451 100 Если SIZE равно 100, тогда процесс будет убит, если его использование ОЗУ превысит 100 МБ.

Я бы настоятельно советовал не делать этого Вы знаете, что вы пытаетесь сделать. Процесс убийства - это не очень хорошая идея. Если в этом процессе есть команда остановки или остановки, отредактируйте скрипт и замените команду kill -9 командой shutdown.

7
ответ дан 4 August 2018 в 19:02
  • 1
    Я исправил форматирование кода для вас. – Nathan Osman 28 July 2011 в 00:08
  • 2
    я бы подумал о том, чтобы немного спать там, например, спать 0,5 ... – Denwerko 28 July 2011 в 00:32
  • 3
    @George Edison. Как вы это сделали. Когда я пытался вставить, это дало мне странно отформатированный текст. Денверко: Где бы вы хотели спать. Я уже спал 10 секунд в цикле while – Amey Jah 28 July 2011 в 20:21
  • 4
    Спасибо за решение, как указано ниже, я могу проверить это. Почему все ужасные предупреждения об убийствах? Программное обеспечение для управления кластерами (LSF, PBS и др.) Делает это все время, когда процесс превышает количество ресурсов, которые он запрашивал, без каких-либо ужасных последствий. Я согласен с тем, что это нехорошее решение для новых пользователей, которые могут ошибочно их использовать, но при правильных обстоятельствах это может быть весьма полезным. – chrisamiller 28 July 2011 в 23:49
  • 5
    Можете ли вы рассказать о том, почему бы не сделать это? – jterm 13 July 2017 в 16:49

Попробуйте инструмент prlimit из пакета util-linux. Он запускает программу с ограничениями ресурсов. Он использует системный вызов prlimit для настройки пределов, которые затем принудительно применяются только ядром.

Вы можете настроить 16 пределов, в том числе:

максимальное количество процессорного времени в секундах Максимальное количество пользовательских процессов Максимальный размер резидентного набора («используемая память») Максимальный размер процесса может блокировать объем памяти виртуальной памяти Максимальное количество открытых файлов Максимальное количество блокировок файлов Максимальное количество ожидающих сигналов Максимальные байты в очередях сообщений POSIX
2
ответ дан 6 August 2018 в 03:22

Ненавижу быть парнем, который отвечает на свой вопрос, но сегодня утром я нашел альтернативный метод, завернутый в небольшую полезность. Это будет ограничено потреблением процессора или памяти:

https://github.com/pshved/timeout

Я сначала делаю этот снимок, но выдвигаю предложение Amey Jah для хороший ответ. Я проверю, не справится ли это с этим.

7
ответ дан 6 August 2018 в 03:22

Я бы настоятельно советовал не делать этого. Как было предложено @chrisamiller, установка ulimit ограничивает RAM доступной с процессом.

Но если вы настаиваете, то следуйте этой процедуре.

Сохраните следующий сценарий как killif.sh: #!/bin/sh if [ $# -ne 2 ]; then echo "Invalid number of arguments" exit 0 fi while true; do SIZE=$(pmap $1|grep total|grep -o "[0-9]*") SIZE=${SIZE%%K*} SIZEMB=$((SIZE/1024)) echo "Process id =$1 Size = $SIZEMB MB" if [ $SIZEMB -gt $2 ]; then printf "SIZE has exceeded.\nKilling the process......" kill -9 "$1" echo "Killed the process" exit 0 else echo "SIZE has not yet exceeding" fi sleep 10 done Теперь сделайте его исполняемым. chmod +x killif.sh Теперь запустите этот скрипт на терминале. Замените PROCID фактическим идентификатором процесса и SIZE с размером в МБ. ./killif.sh PROCID SIZE Например: ./killif.sh 132451 100 Если SIZE равно 100, тогда процесс будет убит, если его использование ОЗУ превысит 100 МБ.

Я бы настоятельно советовал не делать этого Вы знаете, что вы пытаетесь сделать. Процесс убийства - это не очень хорошая идея. Если в этом процессе есть команда остановки или остановки, отредактируйте скрипт и замените команду kill -9 командой shutdown.

7
ответ дан 6 August 2018 в 03:22
  • 1
    Я исправил форматирование кода для вас. – Nathan Osman 28 July 2011 в 00:08
  • 2
    я бы подумал о том, чтобы немного спать там, например, спать 0,5 ... – Denwerko 28 July 2011 в 00:32
  • 3
    @George Edison. Как вы это сделали. Когда я пытался вставить, это дало мне странно отформатированный текст. Денверко: Где бы вы хотели спать. Я уже спал 10 секунд в цикле while – Amey Jah 28 July 2011 в 20:21
  • 4
    Спасибо за решение, как указано ниже, я могу проверить это. Почему все ужасные предупреждения об убийствах? Программное обеспечение для управления кластерами (LSF, PBS и др.) Делает это все время, когда процесс превышает количество ресурсов, которые он запрашивал, без каких-либо ужасных последствий. Я согласен с тем, что это нехорошее решение для новых пользователей, которые могут ошибочно их использовать, но при правильных обстоятельствах это может быть весьма полезным. – chrisamiller 28 July 2011 в 23:49
  • 5
    Можете ли вы рассказать о том, почему бы не сделать это? – jterm 13 July 2017 в 16:49

Попробуйте инструмент prlimit из пакета util-linux. Он запускает программу с ограничениями ресурсов. Он использует системный вызов prlimit для настройки пределов, которые затем принудительно применяются только ядром.

Вы можете настроить 16 пределов, в том числе:

максимальное количество процессорного времени в секундах Максимальное количество пользовательских процессов Максимальный размер резидентного набора («используемая память») Максимальный размер процесса может блокировать объем памяти виртуальной памяти Максимальное количество открытых файлов Максимальное количество блокировок файлов Максимальное количество ожидающих сигналов Максимальные байты в очередях сообщений POSIX
2
ответ дан 7 August 2018 в 21:08

Ненавижу быть парнем, который отвечает на свой вопрос, но сегодня утром я нашел альтернативный метод, завернутый в небольшую полезность. Это будет ограничено потреблением процессора или памяти:

https://github.com/pshved/timeout

Я сначала делаю этот снимок, но выдвигаю предложение Amey Jah для хороший ответ. Я проверю, не справится ли это с этим.

7
ответ дан 7 August 2018 в 21:08

Я бы настоятельно советовал не делать этого. Как было предложено @chrisamiller, установка ulimit ограничивает RAM доступной с процессом.

Но если вы настаиваете, то следуйте этой процедуре.

Сохраните следующий сценарий как killif.sh: #!/bin/sh if [ $# -ne 2 ]; then echo "Invalid number of arguments" exit 0 fi while true; do SIZE=$(pmap $1|grep total|grep -o "[0-9]*") SIZE=${SIZE%%K*} SIZEMB=$((SIZE/1024)) echo "Process id =$1 Size = $SIZEMB MB" if [ $SIZEMB -gt $2 ]; then printf "SIZE has exceeded.\nKilling the process......" kill -9 "$1" echo "Killed the process" exit 0 else echo "SIZE has not yet exceeding" fi sleep 10 done Теперь сделайте его исполняемым. chmod +x killif.sh Теперь запустите этот скрипт на терминале. Замените PROCID фактическим идентификатором процесса и SIZE с размером в МБ. ./killif.sh PROCID SIZE Например: ./killif.sh 132451 100 Если SIZE равно 100, тогда процесс будет убит, если его использование ОЗУ превысит 100 МБ.

Я бы настоятельно советовал не делать этого Вы знаете, что вы пытаетесь сделать. Процесс убийства - это не очень хорошая идея. Если в этом процессе есть команда остановки или остановки, отредактируйте скрипт и замените команду kill -9 командой shutdown.

7
ответ дан 7 August 2018 в 21:08
  • 1
    Я исправил форматирование кода для вас. – Nathan Osman 28 July 2011 в 00:08
  • 2
    я бы подумал о том, чтобы немного спать там, например, спать 0,5 ... – Denwerko 28 July 2011 в 00:32
  • 3
    @George Edison. Как вы это сделали. Когда я пытался вставить, это дало мне странно отформатированный текст. Денверко: Где бы вы хотели спать. Я уже спал 10 секунд в цикле while – Amey Jah 28 July 2011 в 20:21
  • 4
    Спасибо за решение, как указано ниже, я могу проверить это. Почему все ужасные предупреждения об убийствах? Программное обеспечение для управления кластерами (LSF, PBS и др.) Делает это все время, когда процесс превышает количество ресурсов, которые он запрашивал, без каких-либо ужасных последствий. Я согласен с тем, что это нехорошее решение для новых пользователей, которые могут ошибочно их использовать, но при правильных обстоятельствах это может быть весьма полезным. – chrisamiller 28 July 2011 в 23:49
  • 5
    Можете ли вы рассказать о том, почему бы не сделать это? – jterm 13 July 2017 в 16:49

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

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