Saya tahu bahwa bom fork dapat dicegah dengan membatasi jumlah proses satu pengguna, dan kebocoran memori tidak akan membekukan OS saya karena Linux memiliki pembunuh OOM. Tapi bagaimana dengan bom garpu yang bocor memori?
#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 saya menjadi beku setelah mencoba kode ini. Apakah ada yang bisa saya mencegahnya membeku?
Kode ini diuji pada Archlinux, Linux 4.0.5
kompilasi kode hanya menggunakan perintah ini:
g++ -o test test.cpp
Informasi lebih lanjut: Karena kode dapat menghabiskan semua ingatan saya hanya dengan forking beberapa kali, itu tidak seperti bom fork normal, dan membatasi jumlah proses tidak berguna. Juga, fork () sering dieksekusi (ketika ada memori rendah) sehingga OOM-killer jauh lebih lambat daripada fork. Akibatnya, saya harus menggunakan Alt-SysRq-REI untuk menghentikan proses ini, tapi bukan itu yang saya inginkan.
Ini adalah pertama kalinya saya bertanya pada SuperUser. Bantu saya jika pertanyaan saya tidak pantas. Dan terima kasih atas bantuannya.