2013-06-26 3 views
-1

У меня есть приложение, которое проходит через обертку и отправляется как работа на сетке (Linux). y задача состоит в том, чтобы отслеживать использование ОЗУ и виртуальной памяти в процессе, и если процесс выходит из строя из-за проблемы с памятью, повторно отправьте его снова в сетку с более высоким требованием к памяти (используя некоторый переключатель). Я думаю, что это может быть достигнуто путем вызова отдельного потока из приложения, которое следит за основным приложением, а в случае отказа перезапускает основное приложение. Я ищу совет для лучшего решения этой проблемы.Мониторинг использования памяти собственного процесса

Благодаря Ручьи

ответ

0

Тема не будет работать, так как C и C++ mandate that returning from the main function kills all running threads (любезно Do child threads exit when the parent thread terminates).

Вам нужно будет сделать еще один процесс, возможно, сценарий, который запускает процесс, который затем управляет вашим приложением.

+0

Так что я не могу самостоятельно перезапустить приложение, если оно не удается из-за проблемы с использованием памяти без вмешательства пользователя. Я не могу использовать внешний скрипт/программу, которая не вызывается из самого приложения – Ruchi

+0

@Ruchi Я думаю, что это, вероятно, так. Не можете ли ваша обертка запустить второй процесс? Если нет, вам может понадобиться сделать то, что предлагает rakib. Вы можете перезапустить новый экземпляр и убить текущий. –

0

Удовлетворенный способ сделать это - проверить, не удастся ли выделить память, т. Е. Malloc(). Если malloc() терпит неудачу, это свидетельствует о том, что ваша системная память почти заполнена и в этом конкретном случае вы можете делать то, что вам нравится.