تقریباً هر فرآیند در لینوکس دارای یک ترمینال کنترل کننده است. اما ترمینال کنترل کننده چیست؟ بیایید دریابیم.
ممکن است اصطلاح “ترمینال کنترل” را در رابطه با فرآیندهای لینوکس شنیده باشید. ممکن است در مورد اینکه ترمینال کنترلی چیست گیج شوید. خوشبختانه، درک ترمینال کنترل کننده آسان است.
ترمینال کنترل چیست؟
ترمینال کنترل ترمینالی است که در آن فرآیند لینوکس شروع می شود. به عنوان مثال، اگر دستوری را از پوسته اجرا کنید، پنجره ترمینال که در آن دستور را وارد کرده اید، ترمینال کنترل است.
فرآیندهایی که با پایانه های کنترلی راه اندازی می شوند، ویژگی های ترمینال والد را به ارث می برند. این به دلیل راه اندازی فرآیندها در لینوکس است. هنگامی که دستوری را اجرا می کنید، پوسته یک کپی از خود یا “forks” می سازد، سپس خود را با برنامه ای که می خواهید اجرا کنید یا “execs” جایگزین می کند.
نحوه مشاهده اینکه کدام فرآیندها دارای ترمینال کنترلی هستند
دیدن فرآیندهایی که دارای ترمینال کنترلی در لینوکس هستند آسان است. برای دیدن آنها می توانید از دستور ps استفاده کنید.
با استفاده از آرگومان “aux” می توانید تمام فرآیندهای متعلق به همه کاربران در سیستم را ببینید، خواه پایانه های کنترلی داشته باشند یا نداشته باشند:
ps aux
از آنجا که این خروجی های زیادی را در سیستم های لینوکس تولید می کند، می تواند مفید باشد که آن را به یک پیجر وارد کنید، مانند موارد زیر:
ps aux | less
همچنین می توانید چند خط اول را با استفاده از ابزار head مشاهده کنید:
ps aux | head
در خروجی، ستونی با عنوان “TTY” مشاهده خواهید کرد. این ترمینال کنترل فرآیند را نشان می دهد، در صورت وجود. یک فرآیند با یک پایانه کنترل کننده “ttyx” را نشان می دهد که در آن “x” شماره پایانه یا “pts” است، به دنبال آن یک اسلش (/) و شماره خط شبه پایانی وجود دارد.
از آنجایی که اکثر ترمینال ها در واقع شبیه ساز ترمینال هستند، از شبه ترمینال ها یا PTY استفاده می کنند. “pts” به جای یک ترمینال فیزیکی یا کنسول مجازی، یک شبیه ساز ترمینال را نشان می دهد.
فرآیندهای بدون پایانه های کنترلی
در اکثر سیستم های لینوکس، ستون TTY یک کاراکتر علامت سوال (؟) را در بسیاری از فرآیندها نمایش می دهد. این به این دلیل است که فرآیند ترمینال کنترلی ندارد. چرا این اتفاق می افتد؟
سیستم های لینوکس دیمون ها یا سرویس های زیادی را در پس زمینه اجرا می کنند. اینها می توانند سرورهایی مانند وب سرور و همچنین دیمون هایی باشند که کارهای اساسی زیادی مانند اجرای اتصال شبکه شما را انجام می دهند. اینها نیازی به استفاده از ترمینال ندارند، بنابراین فقط بدون ترمینال اجرا می شوند.
اگر یک برنامه گرافیکی را از منوی محیط دسکتاپ راه اندازی کنید، آن ترمینال کنترلی نیز نخواهد داشت.
مالتی پلکسرهای ترمینال مانند GNU Screen یا tmux به شما این امکان را می دهند که یک فرآیند را جدا کنید. اگر از سیستم خارج شوید اما سیستم خود را در حال اجرا نگه دارید، ممکن است متوجه شوید که آن فرآیند همچنین فاقد ترمینال کنترلی است.
اگر فرآیندی بدون ترمینال کنترلی دارید که میخواهید از شر آن خلاص شوید، میتوانید از ابزار kill استفاده کنید.
اکنون در مورد کنترل پایانه ها می دانید
ترمینال کنترل ترمینالی است که شما دستوری را از آن راه اندازی کرده اید. با دستور ps به راحتی می توان فهمید که کدام فرآیندها ترمینال کنترلی انجام می دهند و ندارند. و بسیاری از برنامه های لینوکس این کار را نمی کنند، یا به این دلیل که شیطان هستند یا ممکن است آنها را با یک مالتی پلکسر ترمینال جدا کرده باشید.
مالتی پلکسرهایی مانند tmux نه تنها باعث میشوند که جلسات ترمینال محلی در سراسر ورود به سیستم ادامه پیدا کنند، بلکه ابزار قدرتمندی برای اتصالات SSH از راه دور نیز هستند.