FreeBSD یک سیستم عامل چند وظیفه ای است. هر برنامه ای که در سیستم درهرجا اجرا بشود یک پردازش نامیده می شود. هر دستوری هم که اجرا می شود یک پردازش برای آن ایجاد خواهد شد. همچنین خود FreeBSD هم درهنگام اجرا پردازش های زیادی را ایجاد می کند که پردازش های سیستمی نامیده می شوند.

هر پردازش به وسیله ی یک عدد یکتا که process ID  نامیده می شود شناخته می شود. هر پردازش مانند فایل ها متعلق به یک کاربر و گروه خاص است. به وسیله همین کاربر و گروهی که پردازش متعلق به آنهاست می توان سطح دسترسی پردازش به فایل ها و دستگاه ها را مشخص کرد. اکثر پردازش ها یک پردازش مادر دارند که آنها را ایجاد کرده است. برای مثال shell یک پردازش است و تمام دستوراتی که در آن اجرا می شوند پردازش هایی هستند که توسط پردازش مادر shell ایجاد شده اند. ما در سیستم یک پردازش استثنا داریم که همیشه هنگام شروع بوت سیستم به عنوان اولین پردازش اجرا می شود و process ID آن ۱ است و اسم آن init است.

برخی از برنامه ها طراحی شده اند تا به صورت مدام و به دور از وابستگی به terminal درحال اجرا باشند و با رسیدن هر درخواستی از طرف کاربر به آن پاسخ دهند. برای مثال وب سرورها همیشه در حال اجرا و گوش دادن هستند و به محض اینکه درخواستی از سمت کاربر به سمت آن بیاید به آن پاسخ خواهد داد و همچنین می توان میل سرورها را مثال زد. این نوع برنامه ها با نام daemon شناخته می شوند.

برنامه هایی که به صورت daemon اجرا می شوند بوسیله یک حرف d در انتهای نام آنها شناخته می شوند. برای مثال سرویس دهنده نام دامنه BIND و همچنین سرویس دهنده وب apache به نام httpd و …

دیدن پردازش های روی سیستم:

 برای دیدن پردازش هایی که روی سیستم در حال اجرا هستند از دو دستور ps و top استفاده می کنیم. برای دیدن یک لیست استاتیک از پردازش های در حال اجرا و اینکه هر یک از این پردازش ها چقدر از منابع سیستم مانند cpu و ram استفاده می کنند از دستور ps استفاده می کنیم. همچنین برای دیدن یک لیست داینامیک و همیشه در حال اجرای پردازش های برتر درحال اجرا در سیستم و دیدن اطلاعاتی مانند اندازه استفاده cpu  و ram  سیستم به صورت لحظه ای از دستور top استفاده می کنیم.

دستور ps به صورت پیش فرض دستوری که باعث ایجاد پردازش شده است را نشان می دهد. برای مثال:

% ps

PID TT  STAT    TIME COMMAND

۸۲۰۳  ۰  Ss   ۰:۰۰٫۵۹ /bin/csh

۸۸۹۵  ۰  R+   ۰:۰۰٫۰۰ ps

در مثال بالا ۵ ستون می بینید که به ترتیب نشان دهنده:

PID: نشان دهنده process ID  مربوط به هر پردازش می باشد که می تواند از عدد ۱ تا ۹۹۹۹۹ را بگیرد.

TT: نشان دهنده این است که پردازش بر روی کدام ترمینال در حال اجرا است.

STAT: وضعیت پردازش را نمایش می دهد. (مثلا R+ نشان می دهد که پردازش در حال اجراست.)

TIME: نشان دهنده این است که پردازش چه مدت در حال اجراست.

آپشن هایی بسیاری وجود دارد که می توانیم با آنها خروجی دستور ps را تغییر دهیم و سفارشی سازی کنیم مانند aux .

در زیر خروجی از دستور top آورده شده است

% top

last pid:  ۹۶۰۹;  load averages:  ۰٫۵۶,  ۰٫۴۵,  ۰٫۳۶              up 0+00:20:03  ۱۰:۲۱:۴۶

۱۰۷ processes: 2 running, 104 sleeping, 1 zombie

CPU:  ۶٫۲% user,  ۰٫۱% nice,  ۸٫۲% system,  ۰٫۴% interrupt, 85.1% idle

Mem: 541M Active, 450M Inact, 1333M Wired, 4064K Cache, 1498M Free

ARC: 992M Total, 377M MFU, 589M MRU, 250K Anon, 5280K Header, 21M Other

Swap: 2048M Total, 2048M Free

PID USERNAME    THR PRI NICE   SIZE    RES STATE   C   TIME   WCPU COMMAND

۵۵۷ root          ۱ -۲۱  r31   ۱۳۶M 42296K select  ۰   ۲:۲۰  ۹٫۹۶% Xorg

۸۱۹۸ dru           ۲  ۵۲    ۰   ۴۴۹M 82736K select  ۳   ۰:۰۸  ۵٫۹۶% kdeinit4

۸۳۱۱ dru          ۲۷  ۳۰    ۰  ۱۱۵۰M   ۱۸۷M uwait   ۱   ۱:۳۷  ۰٫۹۸% firefox

۴۳۱ root          ۱  ۲۰    ۰ ۱۴۲۶۸K  ۱۷۲۸K select  ۰   ۰:۰۶  ۰٫۹۸% moused

۹۵۵۱ dru           ۱  ۲۱    ۰ ۱۶۶۰۰K  ۲۶۶۰K CPU3    ۳   ۰:۰۱  ۰٫۹۸% top

۲۳۵۷ dru           ۴  ۳۷    ۰   ۷۱۸M   ۱۴۱M select  ۰   ۰:۲۱  ۰٫۰۰% kdeinit4

۸۷۰۵ dru           ۴  ۳۵    ۰   ۴۸۰M    ۹۸M select  ۲   ۰:۲۰  ۰٫۰۰% kdeinit4

۸۰۷۶ dru           ۶  ۲۰    ۰   ۵۵۲M   ۱۱۳M uwait   ۰   ۰:۱۲  ۰٫۰۰% soffice.bin

۲۶۲۳ root          ۱  ۳۰   ۱۰ ۱۲۰۸۸K  ۱۶۳۶K select  ۳   ۰:۰۹  ۰٫۰۰% powerd

۲۳۳۸ dru           ۱  ۲۰    ۰   ۴۴۰M 84532K select  ۱   ۰:۰۶  ۰٫۰۰% kwin

۱۴۲۷ dru           ۵  ۲۲    ۰   ۶۰۵M 86412K select  ۱   ۰:۰۵  ۰٫۰۰% kdeinit4

همان طوری که در خروجی مشاهده می کنید ۶ خط اول اطلاعاتی کلی در رابطه با سیستم مانند میزان استفاده از cpu و ram و swap و … را به صورت لحظه ای به شما م یدهد و در بقیه خروجی دستور اطلاعاتی درباره پردازش های درحال اجرا بر روی سیستم می دهد که شامل ۱۲ ستون می باشد که مانند همان خروجی دستور ps  با کمی اطلاعات بیشتر می باشد.

نکته: برای درک بهتر خروجی دستور top و نحوه کار کردن آن به صفحه راهنمایان دستور مراجعه کنید.

 کشتن یک پردازش (Killing process):

یکی از راه های ارتباط برقرار کردن با پردازش های درحال اجرا بر روی سیستم ارسال سیگنال به آنها توسط دستور kill می باشد. در اینجا سیگنال های مختلفی برای ارتباط برقرار کردن وجود دارد ولی باید به این نکته توجه داشت که هر کاربر تنها می تواند به پردازش هایی که خودش ایجاد کرده سیگنال ارسال کند و درصورتی که پردازش های دیگر و دیگر کاربران سیگنال ارسال کند با خطای عدم دسترسی مواجه می شود. البته برای این مورد هم استثنا وجود خواهد داشت آن هم کاربر ریشه یا root می باشد که می تواند به تمام پردازش ها بدون هیچ محدودیتی سیگنال ارسال کند.

سیستم عامل هم می تواند به پردازش ها سیگنال ارسال کند. برای مثال اگر برنامه ای برای استفاده از حافظه دستگاه درخواست داشته باشد و اجازه این کار را نداشته باشد به پردازش آن برنامه یک سیگنال نقص تقسیسم بنده یا SIGSEGV ارسال خواهد شد و یا اگر برنامه ای طوری نوشته شده باشد که پردازش آن بعد از مدت زمان معین احتیاج به ارسال alarm داشته باشد یک سیگنال SIGALARM به پردازش آن فرستاده خواهد شد.

دو سیگنال وجود دارد که با استفاده از آن می توانیم پردازش را متوقف کنیم. آن ها عبارتند از SIGTERM و SIGKILL .

SIGTERM یک سیگنال به اصطلاح مودب است و قبل از اینکه پردازش را متوقف کند تمام فایل های لاگ و مواردی که مربوط به آن پردازش می شود را می بندد و سپس اقدام به کشتن پردازش می کند.

SIGKILL مانند آن یکی عمل نمی کند و بدون نگاه کردن به چیزی در همان لحظه و درجا پردازش را می کشد.

یکی از سیگنال هایی هم که به صورت متداول مورد استفاده قرار می گیرد سیگنال SIGHUP , SIGUSER1 و SIGUSER2 می باشد که هر برنامه به نسبت واکنش خاص خود را به این سیگنال ها م یدهد. برای مثال وقتی تنظیمات یک وب سرویس را تغییر می دهیم برای آن که این تنظیمات بر روی سرویس دهنده اعمال شود ۲ راه داریم یکی اینکه آن را restart کینم که باعث می شود برای مدتی سرویس از دسترس خارج شود یا آن که پردازش را مجبور کنیم که فایل تنظیمات را مجدد بخواد و بر روی ram قرار دهد که این کار با استفاده از SIGHUP انجام می شود.