Я знаю, что вилочную бомбу можно предотвратить, ограничив число процессов одного пользователя, и утечка памяти не замерзнет, моя ОС для Linux имеет OOM killer. Но как насчет бомбы с утечкой памяти?
#include <vector>
#include <unistd.h>
#include <ctime>
#include <cstdlib>
using namespace std;
int main() {
srand(time(NULL));
vector<int> vec;
do {
try {
for (int i=0; i<10000000; i++)
vec.push_back(rand());
} catch (bad_alloc e) {
}
fork();
} while (1);
return 0;
}
Мой Linux завис после того, как попробовал этот код. Могу ли я в любом случае предотвратить его замерзание?
Код протестирован на Archlinux, Linux 4.0.5
скомпилируйте код с помощью этой команды:g++ -o test test.cpp
Дополнительная информация: поскольку код может поглотить всю мою память, просто разветвившись несколько раз, он не похож на обычную вилочную бомбу, а ограничение числа процессов бесполезно. Кроме того, fork() часто выполняется (когда памяти мало), поэтому OOM-killer намного медленнее, чем вилки. В результате я должен использовать Alt-SysRq-REI, чтобы остановить эти процессы, но это не то, что я хочу.
Я впервые спрашиваю о SuperUser. Помоги мне, если мой вопрос неуместен. И спасибо за вашу помощь.