Portál AbcLinuxu, 30. dubna 2025 13:08
Nedávno se tu psalo o fork-bombě. Velmi mě to zaujalo, tak jsem si takového milánka zkompiloval a spustil.
#include <unistd.h> int main(void) { while(1) { fork(); } return 0; }
Můj Debiánek nejprve komplet vytuhl a myslel jsem, že je konec. Po dvaceti minutách (co jsem se sprchoval) ho to ale přestalo bavit a vzpamatoval se. Sice byla paměť zaplněná a procesor vytížený, ale fork
už byl zakázaný. Stačilo pomačkat Ctrl+C
a bylo to. Bravo.
Včera jsem programoval n-vláknovou aplikaci na výpočet gravitačního zrychlení, v Javě. 500 metrů nad zemí mi vychází 9,8011 m/s2, což je docela slušné, protože integrační krok je 40 km . Trochu jsem to trápil a i když se výpočet rozdělí na 50 vláken, pořád je to skoro stejně rychlé. Taky jsem se podíval na třetí díl Harryho Pottera a nevím, jestli za to mohl on nebo Hermiona, ale hluboko po půlnoci jsem dostal nepřekonatelnou chuť napsat nativní fork-bombu pro Windows.
#include <windows.h> int _tmain(int argc, _TCHAR* argv[]) { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); ZeroMemory(&pi, sizeof(pi)); for (;;) { BOOL suc = CreateProcess("ForkBomb.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); } return 0; }
Nejprve jsem to pustil na W2k. Tuháč. Šlo sice pohybovat kurzorem od myši, ale jinak se nepohlo nic. Nepomohla ani hodne dlouhá sprcha a po čase jsem to vypnul.
Neodolal jsem a zkusil to ještě na WXP. Tato verze má oproti W2k jedno faktické vylepšení správce oken - i pokud program neodpovídá, jde s okny hýbat. Sice to taky vytuhlo, ale GUI čas od času reagovalo. Nebo je lepší jádro, každopádně jsem na několikátý pokus uzavřel okno konzole, ze které jsem to pustil, a ono se to všehno ukončilo. Kupodivu nefungovalo zabíjení jednotlivých procesů z Task Managera, vyhodilo to na mne hlášku, že na to nemám právo. Tož nevím .
No prostě hezky strávená noc.
Tiskni
Sdílej:
cc fork.c && ./a.out
;)
Ne, ted vazne, nainstaluj si DJGCC (port gcc pro win32/DOS) a jestlize budou vsechny cesty v poradku, tak by melo stacit
gcc fork.c
a.exe
#include <windows.h> int main(int argc, char** argv) { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); ZeroMemory(&pi, sizeof(pi)); for (;;) { BOOL suc = CreateProcess("ForkBomb.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); } return 0; }
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.