+ **در این سوال به هر بخش از سوال که پاسخ بدهید نمره همان قسمت را خواهید گرفت (توضیح نمرهی سوال در انتهای سوال قرار دارد)**
+ **این سوال را باید با bash پاسخ دهید. دقت کنید برای پاسخ به این سوال باید با مفاهیم مربوط به bash و لینوکس آشنا باشید و برای این کار نیاز به جستجو دارید.**
----------
یک پروسهی مخرب روی کامپیوترهای سایت دانشکده مشاهده شده است و چند کامپیوتر سایت را که سیستم عامل *ubuntu* داشته اند را درگیر کرده است. یکی از بچههای سال بالایی ادعا کرده که توانسته اطلاعات زیر را از کامپیوترهای سایت جمع آوری کند:
+ شناسهی پروسهای که مخرب است.
+ یک قسمت از دادههای موجود در شاخهی `/proc` که به ازای هر `(pid (process id` شامل فایلها و دایرکتوریهایی مشابه فایلهای زیر است.
```
proc
├── 2
│ ├── fd/
│ │ ├── 0
│ │ ├── 1
│ │ └── 2
│ ├── fdinfo/
│ │ ├── 0
│ │ ├── 1
│ │ └── 2
│ ├── cmdline
│ ├── gid_map
│ ├── io
│ └── status
├── 4
│ ├── fd/
│ ├── fdinfo/
│ ├── cmdline
│ ├── gid_map
│ ├── io
│ └── status
```
از شما میخواهیم یک اسکریپت *bash* با نام `analyze.sh` بنویسید تا با آنالیز کردن اطلاعات موجود در `/proc` اطلاعاتی از این پروسهی مخرب به ما بدهد.
# توجه!
+ تقریبا همهی افرادی که به حل این مساله میپردازند برای این که بتوانند به سوال پاسخ بدهند نیاز دارند تا در مورد proc در اینترنت جستوجو کنند.
# جزئیات
نحوه اجرای اسکریپت به این صورت است:
```bash
bash analyze.sh malware_pid path/to/proc/snapshot
```
این اسکریپت باید به عنوان خروجی هر کدام از موارد زیر را در یک خط به ما ارائه بدهد.
+ آیدی کاربری که این پروسه را اجرا کرده است.
+ آیدی پروسههایی که توسط این پروسه ایجاد شده اند (پروسههای بچه) که با فاصله از هم جدا شدهاند.
+ آیدی پروسهای که این پروسه را شروع کرده است.
+ آیدی پروسههایی که با پروسهی مخرب به صورت هم زمان روی یک فایل متنی مشترک با پسوند `txt` کار میکردند.
# نکات
+ ممکن است برخی از اطلاعات خواسته شده برای برخی از `pid` ها وجود نداشته باشد. به طور مثال در صورتی که پروسه مخرب هیچ پروسهی بچهای نداشته باشد، شما باید در خروجی `not-found` چاپ کنید. همینطور در صورتی که پروسه با هیچ پروسهی دیگری به فایل مشترک `txt` دسترسی نداشته باشد باید مقدار بخش چهارم را `not-found` بازگردانید.
+ توجه داشته باشید که اگر به جای `not-found` کلمهی دیگری چاپ کنید، تمام امتیاز سوال را از دست خواهید داد.
+ توجه داشته باشید در مورد آخر خواسته شده در پاسخ باید حتما فایلی که برروی آن کار میکنند پسوند `txt` باشد.
+ برای ارسال پاسخ خود یک فایل *Zip* شامل `analyze.sh` آپلود کنید.
# مثال
برای مثال یک خروجی از *proc* به صورت tar.gz [در این آدرس](https://quera.ir/qbox/download/bjecbJhWTw/37829-example.tar.gz) پیوست شده است. شما میتوانید آن را دانلود کرده، *extract* کنید و پس از نوشتن اسکریپت `analyze.sh` با دستور زیر خروجی خود را چک کنید.
+ توجه داشته باشید اگر این فایل را در ویندوز `extract` کنید فایلها ناقص میشوند. پس باید حتما این کار را در linux انجام دهید.
```bash
bash analyze.sh 37829 path/to/proc/snapshot
```
خروجی باید مشابه زیر باشد.
```bash
1000
37830 37831
7225
37832 37833
```
# امتیاز دهی
هر کدام از پاسخها به این سوال امتیاز خود را دارد. امتیاز بندی به شرح زیر است:
+ شما برای پیدا کردن `شناسهی پروسهی پدر` و `شناسهی کاربر اجرا کننده` **۶۰** امتیاز خواهید گرفت. فقط توجه داشته باشید که این در صورتی است که برای سایر مقادیر `not-found` چاپ کنید.
+ در صورتی که به مقادیر بالا و مقدار `آی دی پروسههای بچه` جواب دهید. **۱۰۰** امتیاز دیگر خواهید گرفت.
+ در صورتی که همهی مقادیر را درست به دست آورید **۳۰۰** امتیاز سوال را خواهید گرفت.