pstree - نمایش درختی فرایندها

دستور pstree فرایندهای در حال اجرا را به‌صورت درخت نمایش می‌دهد. ریشه درخت یا با pid و یا با init (در صورتی که pid حذف شده باشد) شروع می‌شود. تمام فرایندها از فرایند init متولد می‌شوند و هر فرایند می‌تواند دارای فرزند یا فرزندان خود باشد که این عمل به کمک خطوط انشعاب نمایش داده می‌شود.

شکل کلی خروجی این دستور:

  init-+-getty
         |-getty
         |-getty
         `-getty

یا

init---4*[getty]

نکته: هر دو خروجی فوق یکسان هستند خروجی نوع اول به‌صورت غیرفشرده است و خروجی نوع دوم به‌صورت فشرده (Compaction) نمایش داده شده است و به‌صورت پیش‌فرض در استفاده از دستور pstree از نوع دوم استفاده می‌شود.
عدد ۴ در نمایش دوم به این معنی است که ۴ فرایند یکسان (۴ زیر شاخه یکسان) از یک فرایند در حال اجرا هستن و احتمالا به منظور نمایش خلاصه‌تر در ترمینال این دستور از این فشرده‌سازی استفاده می‌کند.
نکته: در حالت پیش‌فرض از حالت فشرده یا (Compaction) برای نمایش خروجی استفاده می‌شود.

شکل کلی دستور:

$ pstree [options]

پارامترها:
a-: نمایش آرگومان‌های خط فرمان
A-: ترسیم درخت با استفاده از کارکترهای اسکی
c-: غیر فعال کردن فشرگی زیردرخت‌های همانند
نکته: درصورت استفاده از این آپشن زیرشاخه‌های یکسان از یک فرایند از حالت فشرده خارج و به حالت غیرفشرده تبدیل می‌شود.
G-: استفاده از کارکترهای ترسیم خط VT100 برای ترسیم درخت
h-: برجسته کردن فرایند جاری و اجدادش. درصورتی که ترمینال عمل برجسته‌سازی را حمایت نکند هیچ عملی اتفاق نمی‌افتد.
H-: همانند آپشن قبلی ولی برای یک فرایند خاص استفاده می‌شود، یعنی pid فرایند را بدانیم.
l-: نمایش خطوط طولانی
n-: مرتب‌سازی فرایندها به‌کمک pid به‌جای مرتب سازی به‌کمک نام فرایند
p-: نمایش pidها. pidها به‌صورت اعداد ده‌دهی بعد از هر فرایند در یک پرانتز نمایش داده خواهند شد.
نکته: این آپشن به‌خاطر این‌که pid هر فرایند پدر و فرزند را نمایش می‌دهد لذا مجبور است از حالت غیرفشرده (پیاده‌سازی آپشن c) استفاده کند.
u-: نمایش فرایندها براساس uidها. هر زمانی که uid فرایند با uid ریشه متفاوت باشد uid جدید بعد از فرایند در پرانتز نمایش داده می‌شود.
U-: استفاده از کاراکترهای ترسیم خط یونیکد UTF-8 برای ترسیم درخت
V-: نمایش نسخه
نکته: در بعضی از نسخه‌های دستور pstree ممکن است آپشن‌های جدید اضافه یا حذف شوند.

پس از آشنایی با دستور pstree  با ذکر یک مثال به بیان Compaction می‌پردازیم.

dotnet@dotnet-V:~$ pstree 1552
upowerd───2*[{upowerd}]

خروجی این دستور به‌صورت فشرده یا compaction می‌باشد (به‌صورت پیش‌فرض).

dotnet@dotnet-V:~$ pstree -c 1552
upowerd─┬─{upowerd}
        └─{upowerd}

خروجی دستور فوق (به‌کمک آپشن c-) به‌صورت غیر فشرده نمایش داده می شود.

مثال:  خروجی برای یک pid

dotnet@dotnet-V:~$ pstree 1552

upowerd───2*[{upowerd}]

همان‌طور که مشخص است خروجی از نوع فشرده می‌باشد.

مثال: خروجی برای یک کاربر

dotnet@dotnet-V:~$ pstree dotnet
VBoxClient───{VBoxClient}
VBoxClient───{VBoxClient}
VBoxClient───{VBoxClient}
bamfdaemon───2*[{bamfdaemon}]
dconf-service───2*[{dconf-service}]
gedit───2*[{gedit}]
geoclue-master
gnome-keyring-d───5*[{gnome-keyring-d}]
gnome-terminal─┬─bash───pstree
               ├─gnome-pty-helpe
               └─3*[{gnome-terminal}]
goa-daemon───{goa-daemon}
gvfs-afc-volume───{gvfs-afc-volume}

مثال:

dotnet@dotnet-V:~$ pstree -p

init(1)─┬─L2tpIPsecVpnCon(1017)───echo(1020)
        ├─NetworkManager(467)─┬─dhclient(537)
        │                     ├─dnsmasq(871)
        │                     ├─{NetworkManager}(483)
        │                     └─{NetworkManager}(545)
        ├─VBoxClient(1797)───{VBoxClient}(1811)
        ├─VBoxClient(1805)───{VBoxClient}(1817)
        ├─VBoxClient(1808)───{VBoxClient}(1809)
        ├─VBoxService(1242)─┬─{VBoxService}(1243)
        │                   ├─{VBoxService}(1244)
        │                   ├─{VBoxService}(1245)
        │                   ├─{VBoxService}(1246)
        │                   ├─{VBoxService}(1247)
        │                   ├─{VBoxService}(1248)
        │                   └─{VBoxService}(1249)
        ├─_plutorun(928)─┬─_plutoload(933)
        │                └─_plutorun(932)───pluto(940)─┬─_pluto_adns(1111)
        │                                              └─pluto(948)

خروجی دستور فوق سبب می‌شود که علاوه بر این‌که فرایندهای جاری به‌صورت درختی نمایش داده شوند شماره هر فرایند (pid) آن نیز در یک پرانتز جلوی فرایند مربوطه نمایش داده شود. لذا به کمک مثال اول می‌توان به‌طور جداگانه برای هر فرایند به‌خصوص نیز از این دستور استفاده کرد.