user@linux-tutorials: ~/tutorials/08-processes-and-services — linux-tutorials

tutorials / linux / chapter-08.md · utf-8 ⬇ download chapter-08.md

فصل هشتم: پردازش‌ها و سرویس‌ها در لینوکس

Linux Processes and Services

هر برنامه هنگام اجرا به یک یا چند پردازش (Process) تبدیل می‌شود. مدیریت پردازش‌ها، Jobهای Shell و سرویس‌های systemd از مهارت‌های اصلی مدیریت لینوکس است.

دستورهای این فصل را روی یک سیستم آزمایشی اجرا کنید. پیش از متوقف‌کردن پردازش یا سرویس، نام و PID آن را دوباره بررسی کنید.

Program و Process

Program فایل اجرایی ذخیره‌شده روی دیسک است؛ Process نمونه‌ای در حال اجرای آن برنامه است. هر پردازش یک شناسه یکتا به نام PID، یک پردازش والد با PPID، مالک، وضعیت و منابع اختصاص‌یافته دارد.

پردازش با PID شمارهٔ 1 در سیستم‌های مبتنی بر systemd معمولاً خود systemd است:

user@linux-tutorials: ~/ch-08BASH
ps -p 1 -o pid,comm,args

مشاهده پردازش‌ها

نمایش پردازش‌های ترمینال فعلی:

user@linux-tutorials: ~/ch-08BASH
ps

نمایش همهٔ پردازش‌ها با قالب رایج:

user@linux-tutorials: ~/ch-08BASH
ps aux

نمایش درخت رابطهٔ والد و فرزند:

user@linux-tutorials: ~/ch-08BASH
ps -ef --forest

جست‌وجوی مطمئن‌تر بر اساس نام برنامه:

user@linux-tutorials: ~/ch-08BASH
pgrep -a nginx

pidof نیز PID برنامه‌ای با نام دقیق را نمایش می‌دهد:

user@linux-tutorials: ~/ch-08BASH
pidof sshd

پایش زنده منابع

top مصرف CPU و حافظه را به‌صورت زنده نشان می‌دهد:

user@linux-tutorials: ~/ch-08BASH
top

htop رابط تعاملی‌تری دارد، اما ممکن است ابتدا نیاز به نصب داشته باشد. برای مشاهدهٔ حافظه و میانگین بار سیستم نیز می‌توان از این دستورها استفاده کرد:

user@linux-tutorials: ~/ch-08BASH
free -h
uptime

میانگین بار (load average) درصد CPU نیست؛ تعداد تقریبی کارهای قابل اجرا یا منتظر I/O را در بازه‌های ۱، ۵ و ۱۵ دقیقه نشان می‌دهد و باید نسبت به تعداد CPUهای منطقی تفسیر شود.

سیگنال‌ها و دستور kill

kill برخلاف نامش الزاماً پردازش را فوراً نمی‌کشد؛ یک signal برای PID می‌فرستد. روش صحیح، شروع با SIGTERM است تا برنامه فرصت پاک‌سازی داشته باشد:

user@linux-tutorials: ~/ch-08BASH
kill -TERM PID

شکل کوتاه آن:

user@linux-tutorials: ~/ch-08BASH
kill PID

فقط اگر پردازش پس از مهلتی معقول پاسخ نداد از SIGKILL استفاده کنید:

user@linux-tutorials: ~/ch-08BASH
kill -KILL PID

SIGKILL قابل مدیریت یا نادیده‌گرفتن نیست و ممکن است باعث باقی‌ماندن دادهٔ ناقص شود. برای ارسال سیگنال بر اساس نام:

user@linux-tutorials: ~/ch-08BASH
pkill -TERM -x program-name

گزینهٔ -x از تطبیق ناخواستهٔ نام‌های مشابه جلوگیری می‌کند.

Foreground، Background و Job Control

دستوری که مستقیم در Shell اجرا می‌شود معمولاً در Foreground است. افزودن & آن را در Background همان Shell اجرا می‌کند:

user@linux-tutorials: ~/ch-08BASH
sleep 300 &

Jobهای همان Shell:

user@linux-tutorials: ~/ch-08BASH
jobs -l

کلید Ctrl+Z به‌طور معمول SIGTSTP می‌فرستد و کار را متوقف می‌کند؛ آن را خاتمه نمی‌دهد. سپس می‌توان Job را ادامه داد:

user@linux-tutorials: ~/ch-08BASH
bg %1
fg %1

شمارهٔ %1 شناسهٔ Job در همان Shell است، نه PID سیستم. برای اجرای کاری که پس از خروج از نشست باقی بماند، از ابزارهایی مانند tmux، یک سرویس systemd، یا در موارد ساده nohup استفاده کنید.

اولویت پردازش‌ها

مقدار nice معمولاً از -20 (اولویت زمان‌بندی بیشتر) تا 19 (کمتر) است. کاربر عادی می‌تواند اولویت پردازش خود را کاهش دهد:

user@linux-tutorials: ~/ch-08BASH
nice -n 10 long-command
renice 15 -p PID

افزایش اولویت، مانند تعیین مقدار منفی، معمولاً به دسترسی ویژه نیاز دارد. nice تضمین سهم مشخصی از CPU نیست و سیاست زمان‌بندی Kernel نیز مؤثر است.

Service و systemd

Service برنامه‌ای پس‌زمینه برای ارائهٔ یک قابلیت مداوم است. در بسیاری از توزیع‌های امروزی، systemd مدیر سرویس و راه‌اندازی سیستم است. نام unit باید مشخص باشد؛ پسوند .service در بسیاری از دستورها قابل حذف است.

مشاهدهٔ وضعیت:

user@linux-tutorials: ~/ch-08BASH
systemctl status ssh.service

در Debian/Ubuntu معمولاً نام سرویس ssh.service و در برخی توزیع‌ها sshd.service است. نام واقعی را پیدا کنید:

user@linux-tutorials: ~/ch-08BASH
systemctl list-unit-files --type=service | grep -E '^(ssh|sshd)\.service'

شروع، توقف و راه‌اندازی مجدد:

user@linux-tutorials: ~/ch-08BASH
sudo systemctl start nginx.service
sudo systemctl stop nginx.service
sudo systemctl restart nginx.service

reload در صورت پشتیبانی، تنظیمات را بدون restart کامل بارگذاری می‌کند:

user@linux-tutorials: ~/ch-08BASH
sudo systemctl reload nginx.service

فعال‌کردن برای Boot با شروع فوری:

user@linux-tutorials: ~/ch-08BASH
sudo systemctl enable --now nginx.service

غیرفعال‌کردن اجرای خودکار با توقف فوری:

user@linux-tutorials: ~/ch-08BASH
sudo systemctl disable --now nginx.service

enable به‌تنهایی سرویس را همان لحظه شروع نمی‌کند و disable نیز به‌تنهایی سرویس در حال اجرا را متوقف نمی‌کند.

مشاهده Logها با journalctl

Log یک سرویس در Boot فعلی:

user@linux-tutorials: ~/ch-08BASH
journalctl -u nginx.service -b

دنبال‌کردن پیام‌های جدید:

user@linux-tutorials: ~/ch-08BASH
journalctl -u nginx.service -f

نمایش خطاهای Boot فعلی:

user@linux-tutorials: ~/ch-08BASH
journalctl -b -p err

خواندن بعضی پیام‌ها به عضویت در گروه مناسب یا sudo نیاز دارد.

تمرین‌های فصل هشتم

  1. با ps -ef --forest رابطهٔ چند پردازش را بررسی کنید.
  2. sleep 300 را در پس‌زمینه اجرا کنید و با jobs، fg و bg مدیریت کنید.
  3. PID آن را با pgrep -a sleep پیدا و ابتدا با SIGTERM متوقف کنید.
  4. وضعیت یک سرویس موجود را با systemctl status ببینید؛ بدون دلیل سرویس حیاتی را متوقف نکنید.
  5. Log همان سرویس را برای Boot فعلی با journalctl مشاهده کنید.

جمع‌بندی

در این فصل تفاوت Program، Process، Job و Service؛ مشاهده و اولویت‌بندی پردازش‌ها؛ ارسال صحیح signal؛ و مدیریت سرویس‌ها و Logهای systemd را آموختیم.