Arbetsledning

Jobbhantering i UNIX-liknande operativsystem är en uppsättning verktyg för att manipulera UNIX-skal -batch-jobb , särskilt i interaktivt läge, där "jobb" är en skalrepresentation för en processgrupp .

Som enklast kommer jobbkontroll att bestå av att pausa, återuppta eller avsluta utförandet av ett jobb (det vill säga alla processer i en processgrupp), men kan också innebära att en annan signal skickas till jobbet . Till skillnad från begreppet jobbkontrollblock ( används för seriekörningar i  batchläge ) innebär jobbkontroll en anpassad verktygslåda för att arbeta med batchläge från interaktiva verktyg.

Översikt

De flesta användaruppgifter [1] när man kör genom en terminal (eller terminalemulator ) – bläddra i kataloger, redigera filer och så vidare – hanteras genom att överföra kontrollen till program, återställa kontrollen till skalet när programmet avslutas via standardinmatning och standardutgång till skalet som läser från terminalen, eller skriver in i den och tar emot signaler som skickas från tangentbordet, såsom Control+ C.

Men ibland kan användaren behöva utföra en uppgift med terminalen för ett annat syfte – en uppgift som körs men inte accepterar terminalinmatning kallas ett bakgrundsjobb, medan den enda uppgiften som accepterar terminalinmatning kallas en förgrundsuppgift. Job Control är ett verktyg som är designat för att göra detta möjligt, vilket låter användaren starta processer i bakgrunden, skicka förgrundsprocesser till bakgrunden, föra en bakgrundsprocess i förgrunden och starta och stoppa processer ( avbryta, återuppta, avsluta ) . 

Konceptet "jobb" mappar konceptet med ett enda skalkommando till konceptet med ett operativsystem, där många processer kan startas med ett enda kommando. Specifikt kan en enskild uppgift bestå av många processer: en given process kan skapa ytterligare underordnade processer, som i sin tur kan skapa sina egna underordnade processer, och så vidare, och ett enda skalkommando kan bestå av en pipeline av många relaterade processer. De hanteras av operativsystemet som en enda processgrupp (alla processer i gruppen delar samma PGID), och den interna representationen av skalprocessgruppen är ett jobb. Detta definieras i POSIX som: [2]

En uppsättning processer, inklusive skalpipeline och alla processer som är beroende av den, som alla är medlemmar i samma processgrupp.

En grupp av processer kan alltså hanteras som ett enda skal, ett enda jobb. Jobbet i sin tur kan refereras av handtaget [3] , process-ID:t för jobbets kontroll används av skalets inbyggda kommando för att referera till jobbet. Jobb-ID börjar med %% ; %ndefinierar jobbet som heter n, medan det %%definierar det aktuella. Andra jobb-ID definieras i POSIX [4] . Bash - dokumentationen hänvisar till (%-prefix) som en jobbspec [5] .

Jobbkontroller och jobb-ID:n används i allmänhet endast i interaktiv användning, där de gör det lättare att referera till processgrupper; PGID:er används ofta istället i skript eftersom de är mer exakta och robusta, och faktiskt processkontroll är inaktiverat som standard i Bash-skript.

Exempel

Användaren kan manipulera uppgifter inom en given session med hjälp av inbyggda skalkommandon som jobs, fgeller bg.

En uppgift i ett diagram motsvarar en processgrupp. PPID är ID för den överordnade processen. SID - sessionsidentifierare. TTY - kontrollterminal.

Historik

Jobbkontroll implementerades först i Csh- skalet av Jim Culp [6] och sedan på MIPSA i Österrike, med hjälp av funktionerna i 4.1 BSD -kärnan och antogs i Korn (ksh)-skalet utvecklat av Bell Labs. Det ingick senare i SVR4-versionen av Bourne (sh)-skalet och har funnits sedan dess i de flesta moderna Unix-skal.

Applikation

Skalet håller vanligtvis en lista över jobb i processtabellen. Kommandot jobb listar de bakgrundsjobb som finns i processtabellen, tillsammans med antalet och status (stoppad eller kör) för varje process. Disown -kommandot kan användas för att ta bort jobb från processtabellen, konvertera dem från jobb till demoner så att de fortsätter att köras även när användaren loggar ut .

Ett jobb som körs "i förgrunden" kan stoppas genom att skriva in tecken ( Ctrl+ Z). Detta kommer att skicka en signal SIGTSTP till processgruppen. Standarden SIGTSTPkommer att beordra lämpliga processer för att stoppa och överföra kontrollen till ett skal. Processen kan dock antingen registrera signaltoken eller ignorera SIGTSTP. Processen kan också pausas av en signal SIGSTOPsom inte kan fångas eller ignoreras.

Ett stoppat jobb kan återupptas som ett bakgrundsjobb med kommandot bg shell, eller föras till förgrunden med kommandot fg . I båda fallen omdirigerar skalet I/O i enlighet med detta och skickar en signal till processen SIGCONT, vilket får operativsystemet att återuppta sin exekvering. I Bash-skalet kan ett program köras som ett bakgrundsjobb genom att lägga till ett och-tecken ( & ) på kommandoraden; dess utgång är också riktad till terminalen (potentiellt sammanflätad med utgångarna från andra program), men i detta fall kommer den inte att kunna läsa från terminalingången.

En bakgrundsprocess som försöker läsa från eller skriva till sin styrterminal kommer att skicka en signal SIGTTIN(för ingång) eller SIGTTOU(för utmatning). Dessa signaler stoppar processen som standard, men de kan också hanteras på andra sätt. Skal åsidosätter ofta standardstoppåtgärden SIGTTOUså att bakgrundsprocesser kommer att ge sin standardutgång till den kontrollerande terminalen. I Bash-kompatibla skal kan den inbyggda killen signalera jobb med process-ID såväl som processgrupp-ID - genom att signalera jobbet till hela dess processgrupp, och jobb som specificeras av ID måste "dödas" genom att skicka prefixet " % ". SIGKILLKill kan skicka vilken signal som helst till ett jobb, men om avsikten är att befria systemet från processer, är signalerna och SIGTERM(standard) sannolikt mest tillämpliga . Ett jobb som körs i förgrunden kan stoppas permanent genom att skriva "kill process"-kommandotecknen ( Ctrl+ C).

Anteckningar

  1. Här är "uppgift" en icke-teknisk term för viss aktivitet, medan "process" och "uppgift" är specifika begrepp från operativsystemet.
  2. IEEE Std 1003.1-2001, avsnitt 3.201, jobb arkiverat 9 oktober 2010 på Wayback Machine
  3. ID är en abstrakt skalreferens till en resurs (processgrupp) som hanteras externt av operativsystemet, därför är det ett handtag
  4. IEEE Std 1003.1-2001, avsnitt 3.203, Job Control Job ID Arkiverad 9 oktober 2010 på Wayback Machine
  5. 7.1 Grundläggande om jobbkontroll . Hämtad 14 november 2015. Arkiverad från originalet 29 oktober 2015.
  6. Förord ​​av Bill Joy i Anderson, Gail; Paul Andersson. UNIX C Shell Field Guide  (neopr.) . - Prentice-Hall , 1986. - S. xvii. — ISBN 0-13-937468-X .

Litteratur

Länkar