PROC_PID(5) فایلهای پیکربندی PROC_PID(5)

/proc/pid - اطلاعات و ویژگیهای تفصیلی فرایند در حال اجرا

زیرشاخه شبهفایلی /proc/[pid] به ازای هر فرایند فعال در سیستم ایجاد شده و شامل پروندهها و دایرکتوریهایی است که وضعیت حافظه، توصیفکنندههای فایل، متغیرهای محیطی و ریسههای فرایند را تشریح میکنند.

/proc/pid/
به ازای هر فرایند در حال اجرا یک زیرشاخه عددی در سیستم وجود دارد؛ نام این زیرشاخه بر اساس شناسه فرایند (PID) مشخص می‌شود. هر زیردایرکتوری /proc/pid شامل پرونده‌ها و دایرکتوری‌های شبه‌فایلی شرح داده شده در زیر است.
فایل‌های درون هر پوشه /proc/pid به طور عادی تحت مالکیت شناسه کاربری موثر (UID) و شناسه گروهی موثر (GID) همان فرایند هستند. با این حال، به عنوان یک اقدام امنیتی، چنانچه ویژگی «قابلیت ایجاد دامپ» (dumpable) فرایند روی مقداری غیر از ۱ تنظیم شده باشد، مالکیت پرونده‌ها به root:root تغییر می‌یابد.
پیش از لینوکس 4.11، مالکیت root:root به معنای شناسه کاربری و شناسه گروهی مدیر سیستم (ریشه) سراسری بود (یعنی UID 0 و GID 0 در فضای نام کاربری اولیه). از لینوکس 4.11 به بعد، اگر فرایند در یک فضای نام کاربری غیراولیه باشد که دارای نگاشت معتبر برای شناسه کاربری (یا گروهی) 0 درون آن فضای نام است، مالکیت کاربری (یا گروهی) فایل‌های موجود در زیرشاخه /proc/pid به شناسه کاربری (یا گروهی) ریشه در همان فضای نام تغییر می‌یابد. این بدان معناست که درون یک کانتینر، روند دسترسی‌ها مطابق انتظار برای کاربر ریشه کانتینر عمل خواهد کرد.
ویژگی «dumpable» فرایند ممکن است بنا به دلایل زیر تغییر یابد:
•
این ویژگی صراحتاً از طریق فراخوانی سیستمی prctl(2) با عملیات PR_SET_DUMPABLE تنظیم شده باشد.
•
این ویژگی بنا به دلایل مطرح‌شده در prctl(2) به مقدار پرونده /proc/sys/fs/suid_dumpable بازنشانی شده باشد.
بازنشانی ویژگی «dumpable» به ۱، مالکیت پرونده‌های /proc/pid/* را به شناسه‌های UID و GID موثر فرایند بازمی‌گرداند. با این وجود توجه داشته باشید که اگر UID یا GID موثر پس از آن مجدداً ویرایش شود، ممکن است این ویژگی دوباره بازنشانی گردد. بنابراین توصیه می‌شود تنظیم ویژگی «dumpable» پس از پایان اعمال تغییرات روی شناسه‌های موثر صورت گیرد.
/proc/pid/cmdline
این پرونده فقط‌خواندنی شامل خط فرمان کامل مورد استفاده جهت اجرای فرایند است، مگر اینکه فرایند تبدیل به زامبی (zombie) شده باشد. در حالت زامبی، خواندن این پرونده ۰ بایت برمی‌گرداند.
برای فرایندهای فعال، آرگومان‌های خط فرمان با همان ترتیبی که در حافظه قرار دارند نمایش داده می‌شوند: در صورت رفتار استاندارد فرایند، آرگومان‌ها به صورت رشته‌هایی جداشده با بایت‌های تهی ('\0') هستند که پس از آخرین رشته نیز یک بایت تهی قرار می‌گیرد.
البته فرایندها می‌توانند با بازنویسی این ناحیه از حافظه، فرضیات مربوط به محتوای این فایل را دگرگون سازند.
اگر فرایند پس از فراخوانی execve(2) رشته‌های argv خود را تغییر دهد، آن تغییرات در اینجا نمایان خواهد شد. همچنین فرایند می‌تواند آدرس حافظه این پرونده را با عملیات PR_SET_MM_ARG_START از طریق prctl(2) تغییر دهد.
/proc/pid/cwd
پیوند نمادینی است که به دایرکتوری کاری فعلی فرایند اشاره می‌کند. برای نمونه جهت شناسایی دایرکتوری کاری فرایند شماره ۲۰:

$ cd /proc/20/cwd; pwd -P

در فرایندهای چندریسمانی، چنانچه ریسه اصلی پایان یافته باشد (مثلاً با pthread_exit(3))، محتوای این پیوند نمادین دیگر در دسترس نخواهد بود.
مجوز خواندن این پیوند نمادین (readlink(2)) توسط بررسی حالت دسترسی PTRACE_MODE_READ_FSCREDS کنترل می‌گردد (به ptrace(2) مراجعه فرمایید).
/proc/pid/environ
این پرونده دربردارنده متغیرهای محیطی اولیه‌ای است که هنگام شروع برنامه از طریق execve(2) تنظیم شده‌اند. ورودی‌ها توسط بایت تهی ('\0') از هم جدا شده‌اند. برای نمونه جهت چاپ متغیرهای محیطی فرایند شماره ۱:

$ cat /proc/1/environ | tr '\000' '\n'

اگر فرایند پس از شروع، متغیرهای محیطی خود را تغییر دهد (مثلاً با putenv(3) یا دستکاری مستقیم environ(7))، این پرونده آن تغییرات را بازتاب نمی‌دهد.
/proc/pid/exe
در لینوکس نسخه 2.2 و بالاتر، این فایل پیوندی نمادین به مسیر واقعی فایل اجرایی است. تلاش برای باز کردن این پیوند نمادین، خود برنامه اجرایی را باز می‌کند و حتی می‌توان با اجرای /proc/pid/exe یک نسخه جدید از همان باینری را اجرا نمود. چنانچه فایل باینری روی دیسک حذف شده باشد، عبارت ' (deleted)' به انتهای مسیر افزوده می‌شود.
/proc/pid/fd/
زیردایرکتوری شامل پیوندهای نمادین به ازای هر پرونده باز در فرایند است که نام آن‌ها برابر با شماره توصیف‌کننده فایل (file descriptor) می‌باشد (مانند 0 برای stdin، 1 برای stdout و 2 برای stderr).
برای سوکت‌ها و لوله‌ها، فرمت ارجاع پیوند نمادین به صورت type:[inode] (مانند socket:[2248868]) است. برای توصیف‌کننده‌های فاقد inode (نظیر epoll یا eventfd)، پیوند به شکل anon_inode:file-type نمایش داده می‌شود.
/proc/pid/maps
فایلی شامل نواحی حافظه نگاشت‌شده کنونی فرایند به همراه سطوح دسترسی آن‌ها. برای اطلاعات بیشتر به mmap(2) رجوع کنید.
فرمت هر خط در این پرونده به صورت زیر است:

address           perms offset  dev   inode       pathname
00400000-00452000 r-xp 00000000 08:02 173521      /usr/bin/dbus-daemon
00e03000-00e24000 rw-p 00000000 00:00 0           [heap]
7fffb2c0d000-7fffb2c2e000 rw-p 00000000 00:00 0   [stack]
7fffb2d48000-7fffb2d49000 r-xp 00000000 00:00 0   [vdso]

شامل نشانی حافظه، مجوزها (r=خواندن، w=نوشتن، x=اجرا، s=اشتراکی، p=اختصاصی)، آفست، شناسه دیوایس، شماره inode و مسیر پرونده مربوطه (یا بخش‌های خاص مانند [heap] و [stack]).
/proc/pid/mem
از این پرونده می‌توان برای دسترسی مستقیم به صفحات حافظه یک فرایند از طریق فراخوانی‌های open(2)، read(2) و lseek(2) استفاده کرد. دسترسی به این پرونده توسط PTRACE_MODE_ATTACH_FSCREDS محافظت می‌شود.
/proc/pid/status
ارائه‌دهنده بخش عمده‌ای از اطلاعات آماری و وضعیت فرایند در قالب متنی، خوانا و تفکیک‌شده برای انسان است. این فایل شامل فیلدهایی از جمله Name (نام دستور)، Umask (مجوز پیش‌فرض فرایند)، State (وضعیت فرایند نظیر در حال اجرا، خواب یا زامبی)، Tgid (شناسه گروه ریسه یا همان PID)، Pid (شناسه ریسه)، PPid (شناسه فرایند والد)، Uid و Gid (شناسه‌های کاربری و گروهی)، VmSize (حافظه مجازی مصرفی)، VmRSS (میزان حافظه مقیم فیزیکی)، Threads (تعداد ریسه‌ها) و وضعیت فیلترهای Seccomp می‌باشد.
/proc/self/
این دایرکتوری به فرایندی اشاره می‌کند که در همان لحظه در حال دسترسی به سیستم‌فایل /proc است و محتوای آن کاملاً همسان با زیرپوشه متناظر با شناسه همان فرایند در /proc/pid می‌باشد.

ps(1)، top(1)، ptrace(2)، proc(5)

مه ۲۰۲۵ man-pages