Gestionarea implementării programelor - stadopedia

Fiecare program care rulează pe Linux se numește proces. Linux ca sistem multitasking se caracterizează prin faptul că poate executa simultan multe procese aparținând unuia sau mai multor utilizatori. Lista de procese care se execută în prezent poate fi afișată cu comanda ps, de exemplu, după cum urmează:







PID TT COMMAND TIMP STAT

24 3 S 0:03 (bash)

Procesul de rulare este numit și jobul. Conceptele procesului și sarcinii sunt interschimbabile. Cu toate acestea, de obicei, un proces este numit un loc de muncă, atunci când acestea înseamnă controlul locului de muncă. Gestionarea sarcinilor este o funcție de shell comandă care permite utilizatorului să comute între mai multe operații.

În cele mai multe cazuri, utilizatorii execută doar o singură sarcină - aceasta va fi comanda pe care au introdus-o ultima în shell. Cu toate acestea, multe cochilii de comandă (inclusiv bash și tcsh) au funcții de gestionare a funcțiilor. permițându-vă să executați mai multe comenzi sau sarcini în același timp și să comutați între ele după cum este necesar.

Fundaluri și fundal.

Sarcini pot fi executate fie în prim-plan (în limba engleză), fie în fundal (fundal engleză). În prim plan, la un moment dat, poate exista doar o singură sarcină. Sarcina din prim-plan interacționează cu utilizatorul, primește intrare de la tastatura terminalului și trimite ieșirea pe ecran. Sarcini în fundal nu primesc intrare de la terminal și, de obicei, nu emite nimic către el (altfel datele de ieșire din ele vor fi amestecate arbitrar cu ieșirea de la comanda în prim-plan). În mod obișnuit, acestea sunt sarcini care nu trebuie să interacționeze cu utilizatorul.

Unele sarcini sunt îndeplinite foarte mult și nimic interesant nu se întâmplă în timpul activității lor. Un exemplu de astfel de sarcini este compilarea programelor, precum și comprimarea fișierelor mari. Nu există niciun motiv să te uiți la ecran și să aștepți ca aceste sarcini să fie îndeplinite. Astfel de activități pot fi executate în fundal, iar în timpul execuției acestora puteți lucra cu alte programe.







Pentru a controla executarea proceselor în Linux, este prevăzut un mecanism de semnalizare. Un semnal este capacitatea proceselor de a schimba mesaje scurte standard utilizând sistemul de operare. Semnalul mesajului nu conține altă informație decât numărul de semnal (pentru confort, în loc de număr, puteți utiliza un nume de sistem predefinit). Pentru a transmite un semnal, este suficient ca procesul să folosească apelul de sistem kill () și, pentru a primi semnalul, nu este nevoie de nimic. Dacă procesul trebuie să reacționeze într-un fel într-un mod special la semnal, poate înregistra manualul,
iar dacă manipulatorul nu o face, sistemul va răspunde la semnal. De regulă, acest lucru duce la finalizarea imediată a procesului care a primit semnalul. Operatorul de semnal este pornit asincron. imediat după primirea semnalului, ce ar face procesul în acest moment.

Două semnale - numărul 9 (KILL) și 19 (STOP) - procesează întotdeauna sistemul. Primul dintre ei se oprește forțat și distruge procesul (de aici și numele, ucide-ucide engleza). Semnalul STOP suspendă procesul: în această stare, procesul nu este șters din tabela de proces, dar nu este executat până când nu primește semnalul 18 (CONT) și apoi continuă să funcționeze. În shell-ul Linux, puteți transmite semnalul STOP la procesul activ utilizând secvența de evacuare +.

Numărul de semnal 15 (TERM) servește la întreruperea lucrării. Când întreruperea este întreruptă, procesul se termină. Întreruperea sarcinilor este de obicei efectuată de secvența de control +. Este imposibil să restabiliți în nici un fel un loc de muncă întrerupt. Spre deosebire de semnalul KILL, programele pot intercepta semnalul TERM și pot seta propriul handler pentru acest semnal, apăsând astfel o combinație de taste + nu poate întrerupe procesul imediat. Acest lucru se face astfel încât programul să își poată finaliza corect activitatea - să șterge fișierele temporare, să termine scrierea datelor etc. înainte de a fi terminat. În practică, unele programe nu pot fi întrerupte deloc în acest fel.

Există o utilitate pentru a trimite un semnal unui proces arbitrar. Formatul său este:

ucide [SIGNAL | -SIGNAL] PID

unde SIGNAL este semnalul trimis la proces, iar PID este identificatorul de proces corespunzător. De exemplu, pentru a trimite un semnal KILL la procesul 1, puteți scrie:

-bash: ucide: (1) - Operația nu este permisă

Comanda dată, cu siguranță, sa încheiat cu o eroare - la trimiterea de semnale de control al accesului acorduri de control se extind, de asemenea,
și utilizatorul normal nu are voie să trimită semnale (în special KILL) la procesele care rulează cu privilegii superuser (așa cum sa menționat în laboratorul anterior, procesul cu PID este 1 este init).







Articole similare

Trimiteți-le prietenilor: