Кіріспе

Unix және Unix-ке ұқсас операциялық жүйелерде жұмыс бақылауы - жұмыстарды басқару, әсіресе интерактивті түрде, онда "жұмыс" - процесс тобы үшін қабықтың бейнесі. Жұмысты басқарудың негізгі ерекшеліктері - жұмыс / процесс тобындағы барлық процестерді тоқтату, қайта бастау немесе тоқтату; жұмысқа сигнал жіберу арқылы озық ерекшеліктерді орындау мүмкін. Жұмысты басқару Unix-те оның көп өңдеуі үшін ерекше қызығушылық тудырады және оны жұмысты басқарудан жалпы, жиі ретті орындауға (топтық өңдеуге) қолданылатын жұмыстан ажырату керек.

Шолу

Unix немесе Unix сияқты операциялық жүйелерді терминал (немесе терминал эмуляторы) арқылы пайдаланғанда, пайдаланушының бастапқыда тек бір ғана процессі, олардың интерактивті қабығы (ол кіру қабығы болуы мүмкін немесе болмауы мүмкін) болады. Көптеген тапсырмалар (директор тізімі, файлдарды өңдеу және т.б.) бағдарламаны терминалдың бақылауын алуға және бағдарлама шығып кеткен кезде басқаруды қабыққа қайтаруға мүмкіндік беру арқылы оңай жүзеге асырылуы мүмкін, терминалдан оқып немесе жазатын қабыққа стандартты кіріс пен стандартты шығысқа қосу арқылы және пернетақтадан жіберілген сигналдарды, мысалы, басудан туындайтын аяқтау сигналын ұстап алу. Алайда, кейде пайдаланушы терминалды басқа мақсатта пайдаланып, тапсырманы орындауды қалайды. Терминалдан кіріс алмайтын, бірақ орындалып жатқан тапсырма "арқалықта" орындалады, ал терминалдан кіріс алатын жалғыз тапсырма "алдыңғы планға" орналасады. Жұмыс бақылау - бұл пайдаланушыға процестерді аяқтай бастауға, орындалып жатқан процестерді аяқтай бастауға, аяқтайтын процестерді алдыңғы планға әкелуге және процестерді тоқтатуға немесе тоқтатуға мүмкіндік беру арқылы осыны мүмкін ету үшін әзірленген құрылғы. Жұмыстың тұжырымдамасы бір қабырға командасының (қабықша) тұжырымдамасын команданы қажет ететін көптеген процестердің (операциялық жүйе) тұжырымдамасына сәйкестендіреді. Көп процесстік тапсырмалар пайда болады, өйткені процестер қосымша бала процестерін құрауы мүмкін, ал бір қабықша командасы бірнеше қарым-қатынас процестерінің құбыр желісінен тұруы мүмкін. Мысалы, "title" мәтіні бар жолдарды таңдап, оларды әліппе бойынша сұрыптап, нәтижені пейджерде көрсету. grep title somefile файлын көшіріп алу. txt . sort . less Бұл кем дегенде үш процестерді жасайды: бірін for , бірін for және бірін Job control үшін. Бұл shell-ге осы байланысты процестерді бір бүтіндік ретінде басқаруға мүмкіндік береді, ал пайдаланушы тиісті кілт комбинациясын шығарған кезде (әдетте) процестердің бүкіл тобы тоқтатылады. Жұмыстарды операциялық жүйе бір процестер тобы ретінде басқарады, ал жұмыс - бұл топтың ішкі бейнесі. Бұл POSIX-те былайша анықталады: бір топқа жататын, қабыршақ құбыржолды және одан шыққан кез келген процестерді қамтитын процестер жиынтығы. Жұмысты басқару ID немесе жай ғана ID деп аталатын ілгерілеу арқылы жұмыс жасауға болады, ол жұмысты көрсетуге арналған қабықша құрамында қолданылады. Жұмыстың идентификаторы % таңбасынан басталады; %n n жұмысты, ал %% ағымдағы жұмысты анықтайды. Басқа жұмыс ID-лер POSIX-пен анықталады. Бейресми қолданыста санды "жұмыс нөмірі" немесе "жұмыс ID" деп атауға болады, ал Bash құжаттамасында (% префиксімен) жұмыс ID жұмыс сипаттамасы деп аталады. Жұмысты басқару және жұмыс идентификаторлары әдетте интерактивті пайдалануда ғана қолданылады, онда олар процесстер топтарына сілтеме жасауды жеңілдетеді; скриптте PGID-тер қолданылады, өйткені олар дәл және берік, және шын мәнінде жұмыс бақылауы bash скрипттерінде әдетте бұғатталған.

Тарих

Жұмысты басқаруды алғаш рет C қабығында Джим Кульп, содан кейін Австриядағы IIASA-да 4.1BSD ядросының мүмкіндіктерін пайдалана отырып іске асырды. Белл Лабораториясында жасалған KornShell оны қабылдады және кейіннен ол Борн қабығының SVR4 нұсқасына енгізілді және қазіргі заманғы Unix қабықтарында бар.

Командалар

POSIX стандарты тоқтатылған жұмысты ретімен аяқ астынан және алдыңғы планнан қайта бастауға арналған екі команданы анықтайды. Олар Korn қабықшасының жұмыс бақылау командаларынан үлгіленді.

Іске асыру

Әдетте, қабықша жұмыс кестесінде жұмыс тізімін сақтайды. Естеріңізге сала кетейік, жұмыс құбырдың барлық мүшелері мен олардың ұрпақтарынан тұратын процесс тобына сәйкес келеді. Jobs командасы жұмыс кестесінде бар жұмыс орындарын тізімдейді, олардың жұмыс нөмірі мен жұмыс жағдайы (тоқтатылған немесе жұмыс істеп тұрған). Сеанс пайдаланушы жүйеден шыққан кезде аяқталады (шельден шығып, сессия жетекшісі процесін аяқтайды), шель процессі барлық жұмыстарға SIGHUP жібереді және процесстер топтарының өзі аяқталмас бұрын аяқталуын күтеді. disown командасын жұмыс кестесінен тапсырмаларды алып тастау үшін қолдануға болады, сондықтан сессия аяқталғанда кіші процестер топтары SIGHUP жіберілмейді, сонымен қатар қабықша олардың аяқталуын күтпейді. Олар жетім процестерге айналады және оларды операциялық жүйе тоқтата алады, бірақ көбінесе бұл процестер init-пен қабылданады (жедел өздерінің ата-аналық процестерін init-ке орнатады) және олар dæmon ретінде орындалуын жалғастырады. Жұмыстың тоқтатылуын болдырмау үшін альтернативалар арасында nohup және терминал мультиплексерін пайдалану бар. Алдыңғы планға жүгіріп жатқан тапсырманы тоқтату таңбасын (Ctrl Z) басып тоқтатуға болады . Бұл процестер тобына "терминалды тоқтату" сигналын (SIGTSTP) жібереді. Әдетте SIGTSTP оны қабылдайтын процестерді тоқтатуға себепші болады, ал басқару қабықшаға қайтарылады. Алайда, процесс SIGTSTP үшін сигнал өңдеушісін тіркей алады немесе елемеуге болады. Процесс "туқтау" сигналымен (SIGSTOP) де тоқтатылуы мүмкін, оны ұстап алуға немесе елемеуге болмайды. Алдыңғы планға жүгінетін тапсырманы үзіліс белгісін (Ctrl C) басып үзіп тастауға болады . Бұл "өткінші" сигналын (SIGINT) жібереді, ол процесті аяқтау үшін әдетті, бірақ оны басып тастауға болады. Тоқтатылған жұмысты bg құрамында немесе fg құрамында алдыңғы қатардағы жұмыс ретінде қайта бастауға болады. Екі жағдайда да қабықша I/O-ны дұрыс бағыттап, SIGCONT сигналын процеске жібереді, бұл операциялық жүйенің орындалуын қайта бастауына себеп болады. Bash-та бағдарламаны командалық жолға амперсанд (&) қосу арқылы фондық жұмыс ретінде бастауға болады; оның шығысы терминалға бағытталады (басқа бағдарламалардың шығысымен ықтимал араласқан), бірақ ол терминалдың кірісінен оқи алмайды. Басқару терминалынан оқуға немесе жазуға тырысатын фондық процесс SIGTTIN (кірістік үшін) немесе SIGTTOU (шығыс үшін) сигналын жібереді. Бұл сигналдар процессті әдетте тоқтатады, бірақ оларды басқа жолдармен де өңдеуге болады. Шелл көбінесе SIGTTOU-ның әдетті тоқтату әрекетін басып тастайды, сондықтан аясындағы процестер өздерінің шығыстарын басқару терминалына әдетті түрде береді. Bash-пен үйлесімді қабыршақтарда, kill (/bin/kill емес) job ID-мен, сондай-ақ process group ID-мен жұмыс белгілерін жібере алады. job-ке сигнал жіберу оны бүкіл процесс тобына жібереді, ал job ID-мен көрсетілген jobs % префиксі арқылы өшірілуі керек. kill кез келген сигналды тапсырмаға жібере алады; алайда, егер жүйеден процестерді жою мақсаты болса, SIGKILL және SIGTERM (әдеттегі) сигналдары ең қолайлы.