## 🛠️ مدیریت فرآیندها در لینوکس با `kill`، `pkill` و `killall`
گاهی لازم است یک یا چند فرآیند در حال اجرا را متوقف یا بکُشیم (terminate)؛ بهویژه اگر فرآیندی پاسخگو نباشد یا منابع زیادی مصرف کند. در لینوکس سه دستور اصلی برای این کار وجود دارد:
- `kill`
- `pkill`
- `killall`
هر کدام کاربرد و ویژگیهای خاص خود را دارند که در ادامه بررسی میکنیم.
---
### 1. دستور `kill`
#### الف) ساختار کلی
```bash
kill [سینکنال] PID
```
- **PID**: شناسهی فرآیند (Process ID)
- **سینکنال**: نوع سیگنال (اختیاری؛ پیشفرض `TERM` یا شماره 15)
#### ب) پیدا کردن PID
برای یافتن PID فرایند مورد نظر از دستورات زیر استفاده کنید:
```bash
ps aux | grep process-name
```
یا
```bash
pgrep process-name
```
#### ج) ارسال سیگنالها
- **TERM (15)**: درخواست ملایم برای خاتمه
```bash
kill 1234
# معادل:
kill -TERM 1234
```
- **KILL (9)**: اجباری و بدون امکان گرفتن سیگنال
```bash
kill -9 1234
```
- **HUP (1)**: شبیهسازی ریستارت (برای بارگذاری مجدد تنظیمات)
```bash
kill -HUP 1234
```
---
### 2. دستور `pkill`
`pkill` بهجای PID بر اساس نام فرآیند سیگنال میفرستد.
#### الف) ساختار کلی
```bash
pkill [سینکنال] pattern
```
- **pattern**: الگوی نام فرآیند (میتواند regex باشد)
#### ب) مثالها
- خاتمه همه فرآیندهای `firefox`:
```bash
pkill firefox
```
- ارسال سیگنال `HUP` به همه `nginx`:
```bash
pkill -HUP nginx
```
- قتل اجباری همه `java` (با سیگنال 9):
```bash
pkill -9 java
```
#### ج) گزینههای مفید
- `-u user`: فقط فرآیندهای کاربر مشخص
- `-f`: الگو را در کل خط فرمان جستجو میکند
- `-n`: فقط آخرین (newest)
- `-o`: فقط اولین (oldest)
---
### 3. دستور `killall`
`killall` نام فرآیند را میگیرد و همهی نمونههای آن را میکشد.
#### الف) ساختار کلی
```bash
killall [سینکنال] process-name
```
#### ب) مثالها
- خاتمهی ملایم همه `apache2`:
```bash
sudo killall apache2
```
- قتل اجباری همه `mysqld`:
```bash
sudo killall -9 mysqld
```
- استفاده از الگو (در برخی توزیعها):
```bash
killall -r 'python.*'
```
#### ج) تفاوت با `pkill`
- `pkill` بر اساس الگو فعال است و regex میپذیرد.
- `killall` معمولاً نام دقیق را نیاز دارد (اگرچه با گزینه `-r` regex هم پشتیبانی میکند).
---
## 🧠 نکات مهم و ایمنی
1. **قبل از قتل، PID یا نام را بررسی کنید**
حتماً با `ps` یا `pgrep` اطمینان حاصل کنید که فرآیند درست را هدف گرفتهاید.
2. **اول ملایم (TERM) را امتحان کنید**
استفاده از سیگنال 9 (KILL) را برای مواقع ضروری نگه دارید تا فرآیند امکان پاکسازی منابع را داشته باشد.
3. **اجرا با دسترسی مناسب**
برای کشتن فرآیندهای سیستمی یا متعلق به کاربران دیگر ممکن است نیاز به `sudo` باشد.
4. **محدود کردن با `-u`**
با گزینه `-u user` در `pkill` و `killall` میتوانید فقط فرآیندهای یک کاربر خاص را هدف قرار دهید.
5. **اجتناب از اشتباه در محیط تولید**
در سرورهای حساس، اول در محیط تست یا با دستور dry-run شبیهسازی کنید (مثلاً `pgrep` قبل از `pkill`).
---
## 🔍 جمعبندی
| دستور | ورودی | regex | مثال |
|----------|-----------|-------|---------------------------|
| `kill` | PID | خیر | `kill -9 1234` |
| `pkill` | pattern | بله | `pkill -HUP nginx` |
| `killall`| process-name | با -r | `killall apache2` |
با یادگیری و استفاده صحیح از این دستورات، میتوانید مدیریت فرآیندها را بهصورت دقیق و ایمن انجام دهید.