Op zich niet zo vreemd... Ik heb een programma die random geheugen en processen opslokt. Zeer nuttig (not
), was bedoeld om de OOM te testen. Tot mijn verbazing hing mijn computer nog geen halve seconde later met 1500+ processen actief en mijn geheugen grotendeels vol. Ik hoorde de hardeschijf (swap) nog even ratelen toen de UI al bevroren was, maar dat stopte na enkele seconden ook, en toen was de computer... dood.
.
Code:
Code spreekt voor zich: het maakt in een loop child processes aan (fork()), die het parent proces opstarten, wat dus een clone creeert (execvp()). Daarna allocate ie een meg aan geheugen (malloc(1<<20)), wat niet wordt vrijgegeven. Dit proces zal zich binnen de seconde enkele tig of enkele honderden keren herhalen, wat dus een giga-hoeveelheid RAM in beslag neemt en je procestabel in principe volledig inneemt.
De vraag is: waarom werkt dit? De kernel hoort OOM toe te passen, of geen scheduling aan child processes te geven als dat niet kan (wat hier clearly het geval is). Wat is er zo stom dat dit alsnog wel werkt en dat het mijn computer direct hangt? Volgens XTerm is dit geen kernel bug (wat m.i. wel zo is), wat vinden anderen hiervan?
Code:
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
| int main (int argc, char *argv[]) { while (1) { if (fork()) { malloc(1<<20); } else { execvp(argv[0], argv); } } return 0; } |
Code spreekt voor zich: het maakt in een loop child processes aan (fork()), die het parent proces opstarten, wat dus een clone creeert (execvp()). Daarna allocate ie een meg aan geheugen (malloc(1<<20)), wat niet wordt vrijgegeven. Dit proces zal zich binnen de seconde enkele tig of enkele honderden keren herhalen, wat dus een giga-hoeveelheid RAM in beslag neemt en je procestabel in principe volledig inneemt.
De vraag is: waarom werkt dit? De kernel hoort OOM toe te passen, of geen scheduling aan child processes te geven als dat niet kan (wat hier clearly het geval is). Wat is er zo stom dat dit alsnog wel werkt en dat het mijn computer direct hangt? Volgens XTerm is dit geen kernel bug (wat m.i. wel zo is), wat vinden anderen hiervan?