Skip to content

Commit

Permalink
[edit](forkbomb)
Browse files Browse the repository at this point in the history
  • Loading branch information
shabane committed Dec 28, 2023
1 parent a6e5830 commit f63738b
Showing 1 changed file with 56 additions and 57 deletions.
113 changes: 56 additions & 57 deletions content/post/forkbomb/forkbomb.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,16 @@ tags: [
'ریکرشن بینهایت',
'infinite recursion',
'recursion',
'arya shabane',
'آریا شبانه',
]
---

اوایل که لینوکس نصب کرده بودم کامند هایی که توی
فروم های مختلف می‌دیدم و برای من جدید بود
را دوست داشتم یاد بگیرم و بدونم
کارشون چی هست، برای همین هر کامندی را که می‌دیدم در اولین
را دوست داشتم یاد بگیرم و بدانم
کار آنها چی هست، برای همین هر کامندی را که می‌دیدم در
اولین
فرصت داخل سیستم خودم اجرا می‌کردم. که خب کور کورانه اجرای
هر کامندی اشتباهه بود. یکی از این کامند ها که اجرا کرده
بودم، به اسم فورک بمب
Expand All @@ -32,11 +35,11 @@ tags: [
```

اگر این کامند را اجرا کنید(امیدوارم تا الان نکرده باشید) تقریبا زیر یک دقیقه سیستم شما
هنگ می‌کنه و مجبور می‌شوید ری‌استارت‌ش کنید.
هنگ می‌کند و مجبور می‌شوید سیستم را ریبوت کنید.

---

توی این پست من ساختار این کامند را تشریح می‌کنم و باهم
توی این پست ساختار این کامند را تشریح می‌کنم و باهم
کمی
bash
یاد می‌گیریم.
Expand All @@ -62,62 +65,51 @@ call recursion

> درختی که می‌بینید را اجرای فورک بمب درنظر بگیرید،
هر ستاره یک پروسه جدید است که توسط پروسه قبلی اجرا شده،
و خودش هم دائم پروسه جدید باز می‌کند و هر یک از پروسه ها
هم همین راند را ادامه می‌دهند.
و خودش هم دو پروسه جدید باز می‌کند و هر یک از پروسه ها
هم همین روند را ادامه می‌دهند.

```rust
*
├── *
│   ├── *
│ │ ├── *
│ │ │ ├── *
│ │ │ │ ├── *
│ │ │ │ └── *
│ │ │ └── *
│ │ │ ├── *
│ │ │ └── *
│ │ │
│ │ └── *
│ │ ├── *
│ │ │ ├── *
│ │ │ └── *
│ │ ├── *
│ │ │ ├── *
│ │ │ └── *
│ │ └── *
│ │ ├── *
│ │ │ ├── *
│ │ │ └── *
│ │ └── *
│ └── *
│ └── *
│ ├── *
│ │ ├── *
│ │ └── *
│ ├── *
│ │ ├── *
│ │ └── *
│ └── *
│ ├── *
│ └── *
├── *
│ └── *
│ ├── *
│ ├── *
│ │ └── *
│ │ ├── *
│ │ └── *
│ │
│   └── *
│ ├── *
│ │ ├── *
│ │ │ ├── *
│ │ │ └── *
│ │ └── *
│ │ ├── *
│ │ └── *
│ │
│ └── *
│ ├── *
│ └── *
├── *
│ └── *
│ ├── *
│ │ ├── *
│ │ └── *
│ ├── *
│ │ ├── *
│ │ └── *
│ └── *
│ ├── *
│ └── *

│ ├── *
│ │ ├── *
│ │ └── *
│ └── *
│ ├── *
│ └── *
```


من برای اینکه سیستم‌م هنگ نکند فورک بمب را روی داکر
من برای اینکه سیستم‌ خودم هنگ نکند فورک بمب را روی داکر
اجرا کردم و خب حتی یک ثانیه هم طول نکشید و آن کانتینر
کاملا هنگ کرد.

Expand All @@ -131,21 +123,21 @@ call recursion

بیایید وارد کد بشیم، این علامت ها و کاراکتر ها چی هستند؟

برای تعریف یک فانکشن توی
<!-- برای تعریف یک فانکشن توی
bash
ما به این صورت عمل می‌کنیم که اول اسم فانکشن بعد پرانتر
ما به این صورت عمل می‌کنیم که اول اسم فانکشن بعد پرانتز
و بعد کرلی براکت(توی فارسی می‌گیم آکولاد) و داخل کرلی
براکت ما قطعه کد را می‌نویسیم. مثلا برای فانکشنی که یک
اسم را روی صفحه چاپ کنه به این صورت عمل می‌کنیم
```bash
pname(){ echo 'foo'; }
```
``` -->

حالا اگه دقت کنید اولین کاراکتر فورک بمب، علامت
اگه دقت کنید اولین کاراکتر فورک بمب، علامت
`:`
است. این علامت اسم فانکشن ما است. برخلاف قانون تعریف نام
متغییر ها توی
برای متغییر ها توی
bash،
می‌توانیم از کاراتر های یونیکد هم برای تعریف نام فانکشن
استفاده کنیم، مثلا یک
Expand Down Expand Up @@ -197,8 +189,8 @@ call recursion
`|`
به اسم پایپ شناخته می‌شود، وظیفه این علامت
دادن خروجی یک کامند بعنوان ورودی به یک کامند دیگر هست،
حلا اگر
دقت کنید ما ریزالت اجرای
حلا
دقت کنید که ما خروجی اجرای
`:`
را به خودش می‌دهیم. دقیقا به این شکل

Expand All @@ -207,19 +199,26 @@ call recursion
```
با این علامت هر پروسه دو بار پروسه جدیدی از خودش می‌سازد
اگر از این علامت استفاده نکنیم، پروسه ما به صورت خطی خودش
را اجرا خواهد کرد، اینطوری کد ما با یک عادی
را اجرا خواهد کرد، اینطوری کد ما با یک حلقه
`while`
تفاوتی نخواهد داشت.
تفاوتی زیادی نخواهد داشت.


علامت
`&`
اجرای یک کامند را به بکگراند(پس زمینه) می‌برد.
برای مثال اگر یک برنامه اجرا کنید و تا تمام شدن اجرای
آن برنامه نتوانید از ترمینال استفاده کنید، شما می‌توانید
آن برنامه را در بکگراند اجرا کنید. حالا توی فورک بمب
این علامت باعث می‌شه تا یک کد درحالی که کارش به اتمام
نرسیده است، کامند بعدی اجرا بشود.
برای مثال بعد از اجرای یک دستور باید صبر کنید پروسه
آن تمام شود تا بتوانید دستور بعدی را اجرا کنید.
ولی اگر از علامت
`&`
بعد از هر دستور استفاده کنید، دیگر نیاز نیست
صبر کنید تا روند اجرای آن برنامه تمام شود.
درواقع با علامت
`&`
شما می‌توانید
هر برنامه را در بکگراند اجرا کنید. حالا توی فورک بمب
این علامت باعث می‌شود تا فانشکنی که اجرا کردین درحالی که کارش به اتمام
نرسیده است، فانکشن بعدی اجرا بشود.

![& in bash](/images/post/forkbomb_and.jpg)

Expand Down

0 comments on commit f63738b

Please sign in to comment.