| reptyr(1) | General Commands Manual | reptyr(1) |
نام (NAME)
reptyr - تغییر والد و انتقال یک برنامهٔ در حال اجرا به یک ترمینال جدید
خلاصه دستور (SYNOPSIS)
reptyr PID
reptyr -l|-L [COMMAND [ARGS]]
توضیحات (DESCRIPTION)
reptyr ابزاری برای گرفتن یک برنامهٔ در حال اجرای موجود و اتصال آن به یک ترمینال جدید است. فرآیندی طولانی را از طریق ssh آغاز کردهاید، اما باید سیستم را ترک کنید و نمیخواهید آن را متوقف نمایید؟ کافی است یک نشست screen را شروع کنید، از reptyr برای گرفتن آن استفاده کنید، سپس نشست ssh را خاتمه داده و به خانه بروید.
reptyr با اتصال به برنامهٔ هدف با استفاده از ptrace(2)، تغییر مسیر توصیفکنندههای فایل مربوطه، و تغییر ترمینال کنترلی برنامه (ببینید: tty(4)) کار میکند. همین جزئیات آخر است که باعث میشود reptyr بسیار بهتر از گزینههای جایگزین مانند retty(1) عمل کند.
پس از پیوستن به برنامه، برنامه برای پوستهای (shell) که از آن اجرا شده بود، بهصورت در پسزمینه قرارگرفته یا تعلیقشده به نظر میرسد (بسته به نوع پوسته). برای بیشترین ضریب اطمینان میتوانید دستور زیر را در پوستهٔ قبلی اجرا کنید:
- bg; disown
تا وابستگی با برنامه حذف شود، با این وجود reptyr تلاش خواهد کرد تا اطمینان حاصل کند که برنامهٔ هدف حتی اگر بدون انجام این کار پوسته را ببندید، همچنان در حال اجرا باقی بماند.
گزینهها (OPTIONS)
-T
- استفاده از یک حالت اتصال جایگزین، «ربودن TTY» (TTY-stealing). در این حالت، reptyr روی فرآیند هدف ptrace(2) را فراخوانی نمیکند، بلکه تلاش میکند شبیهساز ترمینال را برای pty آن فرآیند شناسایی کرده و انتهای اصلی (master) pty را برباید. این حالت در شرایط بسیاری قابل اعتمادتر و انعطافپذیرتر است (بهعنوان مثال، میتواند همهٔ فرآیندهای موجود روی یک tty را متصل کند، نه فقط یک فرآیند تکی را). با این حال، بهعنوان یک نقطهضعف، فرآیندهای فرزند sshd(8) را نمیتوان از طریق -T متصل کرد، مگر اینکه reptyr بهعنوان کاربر ریشه (root) اجرا شود. برای اطلاعات بیشتر در مورد tty-stealing به نشانی مراجعه کنید.
-l, -L [COMMAND [ARGS]]
- به جای
اتصال به یک
فرآیند
جدید، یک
جفت pty تازه
ایجاد
میکند،
انتهای master را
به ترمینال
فعلی هدایت
(proxy) میکند و
سپس نام slave pty
را چاپ
میکند. این
مقدار را
میتوان به
عنوان مثال
به گزینهٔ set
inferior-tty در gdb پاس
داد.
اگر یک COMMAND و ARGS اختیاری همراه با -l داده شود، آن دستور به عنوان فرزندی از reptyr اجرا خواهد شد در حالی که متغیر محیطی REPTYR_PTY روی نام slave pty تنظیم شده است. اگر به جای -l از -L استفاده شود، آنگاه توصیفکنندههای فایل ۰ تا ۲ فرزند نیز به سمت slave هدایت خواهند شد، و فرزند در یک نشست جدید همراه با slave به عنوان ترمینال کنترلیاش اجرا میشود.
-s
- بهطور پیشفرض، reptyr هر توصیفکنندهٔ فایلی در هدف را که به ترمینال کنترلی هدف متصل بوده است، طوری منتقل میکند که به ترمینال جدید اشاره کند. گزینهٔ -s باعث میشود که reptyr بدون قید و شرط توصیفکنندههای فایل ۰، ۱ و ۲ را در هدف متصل کند، حتی اگر هدف فاقد ترمینال کنترلی باشد یا آنها به یک ترمینال متصل نباشند.
-v
- چاپ نسخهٔ reptyr و خروج.
-h
- چاپ پیام راهنمای نحوهٔ استفاده و خروج.
-V
- چاپ خروجی اشکالزدایی پرگو (verbose) در حین اجرا.
نکات (NOTES)
reptyr برای اتصال به برنامهٔ هدف به فراخوانی سیستمی ptrace(2) وابسته است. در توزیع Ubuntu نسخهٔ Maverick و بالاتر، این قابلیت به دلایل امنیتی بهطور پیشفرض غیرفعال است. میتوانید آن را موقتاً با اجرای دستور زیر به عنوان کاربر ریشه (root) فعال کنید:
-
# echo 0 > /proc/sys/kernel/yama/ptrace_scope
یا به صورت دائمی با ویرایش فایل /etc/sysctl.d/10-ptrace.conf که حاوی اطلاعات بیشتری در مورد این تنظیمات نیز میباشد.
گزارش باگها (BUGS)
هنگام اتصال به برخی برنامههای curses، آنها فوراً صفحه را بازترسیم نمیکنند و برای وادار کردن به بازترسیم، فشردن کلیدهای ^L یا موارد مشابه لازم خواهد بود.
به همین ترتیب، پس از اتصال به برنامههای خاص، ترمینال قبلی در یک وضعیت نامعمول رها خواهد شد و ممکن است اجرای clear یا حتی reset پیش از آنکه ترمینال قبلی دوباره قابل استفاده شود، لازم باشد.
اتصال به rtorrent (و احتمالاً برخی برنامههای دیگر) به درستی کار نمیکند (rtorrent پذیرش ورودی را متوقف میکند؛ مشکل این است که rtorrent از epoll برای نظارت بر stdin استفاده میکند، و ارجاع داخلی fd مربوط به epoll به tty قدیمی بهروزرسانی نمیشود).
اتصال به فرآیندی که دارای فرآیندهای فرزند است به درستی کار نمیکند. رفع این مشکل باید امکانپذیر باشد -- فقط کافی است تکتک فرزندان به طور جداگانه ptrace شده و همین عملیات روی آنها نیز پیاده شود.
اتصال به یک فرآیند less(1) در صورتی که فایل .lessfilter داشته باشید کار نمیکند، زیرا در این حالت less یک فرزند زامبی (zombie child) باقی میگذارد. میتوان این مشکل را با راهکارهای جانبی برطرف کرد.
اشکالات باید به نویسنده (پایین را ببینید) یا از طریق سامانه پیگیری اشکالات در GitHub گزارش شوند.
نویسندگان (AUTHORS)
نرمافزار reptyr توسط Nelson Elhage <nelhage@nelhage.com> نوشته شده است.
وبگاه (HOMEPAGE)
همچنین ببینید (SEE ALSO)
| 03 Feb 2011 |