So maybe I’m a strange guy, but I think fork bombs are really funny. What’s a fork bomb? The basic premise is that you spawn a process that spawns a process that spawns a process…, ad infinitum.
The most beautiful example of a fork bomb, and really one of the most beautiful lines of code ever, was created by Denis Rolo:
:(){ :|:& };:
Aside from looking like the gnarliest smiley face ever, running the above in a Unix terminal will spawn processes forever, unless you’ve limited the number of processes that can be run (I think OS X does this by default, so any brave Mac users are encouraged to try). After a whole lot have been spawned, you’ve basically locked up your system and will have to reboot.
There’s a thorough explanation of how and why the above code works over at the Wikipedia fork bomb page, but I almost feel like knowing how it works ruins the beauty somewhat. But that page also has lots of examples of fork bombs in various languages. Unfortunately, R is absent from that list. Well I think that’s just a shame.
We could invoke the above (with some modifications due to a weird quirk) with the system() function. But that’s basically just letting the shell have all the fun. However, we can do one better using the multicore package:
library(multicore)
while (TRUE) fork()
So why would you want to do this? Well, I think the whole point is that you wouldn’t want to. It’s just neat.
One final remark on this. I have a good friend with whom I regularly converse about programming. He’s a hardcore C programmer, and as such, he finds my struggles with efficiency in R hilarious. When I told him that I was going to make a blog post about an R forkbomb, he had a simple, two word response:
“Slowest forkbomb.”
Who says programmers don’t have a sense of humor?