R Fork Bomb

wrathematics

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?


3 comments on “R Fork Bomb

  1. You should point out to your C friend that a lot of R packages are written in C. Perhaps he could find some of the most offensive inefficiencies in R, and re-write them in C?

  2. richierocks (@richierocks) on said:

    Or even

    repeat fork()

Leave a Reply

Your email address will not be published. Required fields are marked *

*


seven × four =

47,409 Spam Comments Blocked so far by Spam Free Wordpress

HTML tags are not allowed.