Кіріспе
Unix және Unix-ке ұқсас операциялық жүйелерде жұмыс бақылауы - жұмыстарды басқару, әсіресе интерактивті түрде, онда "жұмыс" - процесс тобы үшін қабықтың бейнесі. Жұмысты басқарудың негізгі ерекшеліктері - жұмыс / процесс тобындағы барлық процестерді тоқтату, қайта бастау немесе тоқтату; жұмысқа сигнал жіберу арқылы озық ерекшеліктерді орындау мүмкін. Жұмысты басқару Unix-те оның көп өңдеуі үшін ерекше қызығушылық тудырады және оны жұмысты басқарудан жалпы, жиі ретті орындауға (топтық өңдеуге) қолданылатын жұмыстан ажырату керек.
In Unix and Unix like operating systems, job control refers to control of jobs by a shell, especially interactively, where a "job" is a shell's representation for a process group. Basic job control features are the suspending, resuming, or terminating of all processes in the job/process group; more advanced features can be performed by sending signals to the job. Job control is of particular interest in Unix due to its multiprocessing, and should be distinguished from job control generally, which is frequently applied to sequential execution (batch processing).
Шолу
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 скрипттерінде әдетте бұғатталған.
However, sometimes the user will wish to carry out a task while using the terminal for another purpose. A task that is running but is not receiving input from the terminal is said to be running "in the background", while the single task that is receiving input from the terminal is "in the foreground". Job control is a facility developed to make this possible, by allowing the user to start processes in the background, send already running processes into the background, bring background processes into the foreground, and suspend or terminate processes. The concept of a job maps the (shell) concept of a single shell command to the (operating system) concept of the possibly many processes that the command entails. Multi process tasks come about because processes may create additional child processes, and a single shell command may consist of a pipeline of multiple communicating processes. For example, a command to select lines containing the text "title", sort these alphabetically, and display the result in a pager. grep title somefile. txt | sort | less
This creates at least three processes: one for , one for , and one for Job control allows the shell to control these related processes as one entity, and when a user issues the appropriate key combination (usually ), the entire group of processes gets suspended. Jobs are managed by the operating system as a single process group, and the job is the shell's internal representation of such a group. This is defined in POSIX as:
A set of processes, comprising a shell pipeline, and any processes descended from it, that are all in the same process group. A job can be referred to by a handle called the job control job ID or simply job ID, which is used by shell builtins to refer to the job. Job IDs begin with the % character; %n identifies job n, while %% identifies the current job. Other job IDs are specified by POSIX. In informal usage the number may be referred to as the "job number" or "job ID", and Bash documentation refers to the (% prefixed) job ID as the jobspec. Job control and job IDs are typically only used in interactive use, where they simplify referring to process groups; in scripting PGIDs are used instead, as they are more precise and robust, and indeed job control is disabled by default in bash scripts.
Тарих
Жұмысты басқаруды алғаш рет 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 (әдеттегі) сигналдары ең қолайлы.