Zaustavljanje linux procesa. Uništavanje procesa u Linuxu - naredbe ps, kill i killall. Završite proces u Linuxu - naredbe kill i killall

💖 Sviđa li vam se? Podijelite vezu sa svojim prijateljima

Argument -9 (ili KILL) za kill naredbu trebao bi se koristiti samo na POSIX-kompatibilnim sustavima kada je to apsolutno neophodno. Zašto? Proces ne može obraditi signal KILL. To znači da će nakon ubijanja procesa s kill -9, podređeni procesi ostati u memoriji i postati "siroče" sustav datoteka bit će začepljen privremenim datotekama, segmenti dijeljene memorije bit će aktivni, utičnice će biti obješene, a funkcija atexit(3) uopće se neće izvršiti. Kao rezultat toga, postoji rizik od neočekivanih problema koje je teško otkloniti.

Umjesto toga, koristite zadani signal TERM i KILL samo ako se manje problematični signali pokažu neučinkovitima:

$ubiti 6738
$ ubiti -INT 6738
$ ubiti -HUP 6738
$ ubiti -UBITI 6738

Ako čak ni signal KILL ne uspije ubiti proces, proces je vjerojatno zapeo na I/O ili u nekom drugom stanju koje se ne može uništiti. Možda ćete morati ponovno pokrenuti ili nasilno isključiti oštećeni mrežni pogon.

Korištenje zadanog kill -KILL je prihvatljivo kada se radi o problematičnoj aplikaciji, na primjer, starije verzije Netscapea često se završavaju samo sa KILL signalom. Međutim, ovo je rijetka iznimka od pravila: koristite KILL za ove poznate aplikacije i samo za njih.

Problemi koji su se javili prilikom prekidanja procesa

Slanje različitih signala uzastopno može prouzročiti sljedeće probleme: Prvo, proces može potrajati nekoliko sekundi, pa čak i nekoliko desetaka sekundi, da se elegantno završi. Jednom proizvodu koji sam koristio trebalo je više od 30 sekundi da ispravno prekine nakon što je primio signal TERM. Srećom, ova je značajka otkrivena tijekom testiranja, pa je za ovaj slučaj napisana odgovarajuća skripta. Drugo, ponekad postoje situacije u kojima je stari proces prekinut dok je novi proces preuzeo njegov ID u intervalu između signala TERM i KILL. Sustavi s velikim protokom procesa i sustavi gdje kernel nasumično dodjeljuje PID-ove, kao što je OpenBSD, posebno su izloženi ovom riziku. Provjera naziva procesa ili njegovog PPID-a ne pomaže uvijek, budući da bi novi proces mogao biti račvanje istog roditelja i imati isto ime, tako da posebno paranoične skripte mogu također provjeriti vrijeme stvaranja procesa ili druge metapodatke prije slanja signala. Ove se situacije mogu dogoditi rijetko, ali vrijedi ih uzeti u obzir ako se morate suočiti s kritičnim procesom.

Signali završetka procesa

Signali završetka procesa mogu se identificirati imenom ili sekvencijskim brojem: kill -1 i kill -HUP su ekvivalentni. Međutim, korištenje imena signala sigurnije je jer se navođenjem argumenta -1 lako može pogrešno upisati, šaljući signal drugom procesu ili čak grupi procesa. Također, uvijek pokušajte koristiti ime u svojim skriptama, jer će vam to pomoći da bolje razumijete koja se vrsta signala šalje onome tko će čitati vaš kod.

HUP signal zamrzava ljusku, pa je dobar način očistite ljusku koja čeka na unos ili zatvorite SSH sesiju.

Za više informacija o signalima prekida procesa, pogledajte

Signali su softverski prekidi. Koriste se za komunikaciju između procesa u UNIX-u i operativnim sustavima sličnim UNIX-u kao što su Linux, Mac OS.

Signali se koriste od Bell Labs UNIX-a 1970. godine i sada su službeno definirani standardom POSIX. Kada proces primi signal, operativni sustav prekida normalan tok izvršavanja procesa i daje obavijest.

Nije bitno koji operacijski sustav koristite, nedvojbeno ćete doživjeti da su vam aplikacije blokirane i odbijaju ispravno raditi. U Unixu, Linuxu, postoji "kill" naredba koju možete koristiti da odmah prekinete proces, ali ne samo to, već ću o tome malo kasnije. U ovom članku “Kill Command u Unix/Linuxu” objasnit ću vam i pokazati kako gotove primjere razne naredbe ubiti pomoćne programe.

Naredbe i signali za ubijanje

Kada izdate naredbu kill, zapravo šaljete signal sustavu i upućujete ga da prekine pokvarenu aplikaciju. Postoji ukupno 60 signala koji se mogu koristiti, ali sve što stvarno trebate znati su SIGTERM (15) i SIGKILL (9).

Sve signale možete vidjeti pomoću naredbe:

# ubiti -l

Na mom MacOS-u:

Pokušat ću govoriti o svim signalima, ali prvo ćemo govoriti samo o najvažnijim i najčešće korištenim.

Osnovni signali

Sljedeći signali su dio POSIX standard. Svaki signal je makro definiran u Datoteka zaglavlja sustava. Obično se skraćuju bez prefiksa SIG; na primjer SIGHUP se često naziva jednostavno HUP.

SIGTERM– Ovaj signal zahtijeva zaustavljanje procesa koji je u tijeku. Ovaj se signal može zanemariti. Procesu se daje vremena da se dobro zatvori. Kada se program dobro zatvori, to znači da mu je dano vremena da spasi svoj napredak i oslobodi resurse. Drugim riječima, nije "natjerao" proces na prekid.

SIGKILL– Signal SIGKILL uzrokuje da proces odmah prestane obavljati svoj posao. Program ne može ignorirati ovaj signal. Nespremljeni napredak bit će izgubljen.

Sintaksa za "ubiti".

Sintaksa naredbe je:

# ukini PID(ove)

# ubiti [-s] [-l] %pid

Zadani signal (ako nije naveden) je SIGTERM. Kada ovaj signal ne pomaže i ne radi, možete upotrijebiti sljedeće opcije za "kill" da nasilno prekinete proces:

# ubij SIGKILL PID

# ubiti -9 PID

gdje je “-9” oznaka koja se odnosi na signal SIGKILL.

Ako ne znate koji PID koristiti za aplikaciju koje se želite riješiti, pokrenite naredbu:

$ps -pom

A ako znate određenu aplikaciju (na primjer, apache), tada možete ukloniti ono što je nepotrebno i prikazati sve procese za ovu uslugu:

$ ps -aux | grep apache

Ovo će prikazati sve pokrenute aplikacije zajedno s njihovim PID-ovima.

Na primjer, da ukinem aplikaciju, pokrećem sljedeću naredbu:

# ubiti -9 3629

Također je vrijedno napomenuti da možete pokrenuti više procesa u isto vrijeme kako bi se oni mogli "ubiti":

# ubij -9 PID1 PID2 PID 3

Ponovno učitati konfiguracijske datoteke ili ponovno pokrenite uslužne programe:

# ubij -1 broj_PID-a

Osobito korisni signali uključuju HUP, INT, kill, STOP, CONT i 0.

Opcije su:

-s naziv_signala
Simbolično ime signala koje specificira signal za slanje signala koji nije zadani.

-l
Ako operand nije naveden, onda prikaži imena signala; Inače, napišite naziv signala koji odgovara exit_status.

-ime_signala
Simbolično ime signala koje specificira signal koji se prema zadanim postavkama šalje u TERM.

-signalni_broj
Nenegativan decimalni cijeli broj koji navodi zadani signal za slanje u TERM.

Sljedeći PID-ovi imaju posebno značenje:
-1 Ako je superkorisnik, tada emitira signal svim procesima; inače emitira svim procesima koji pripadaju-
ing za korisnika.

Neki od najčešće korištenih signala su:

  • 1 HUP (hang up) - spustiti slušalicu.
  • 2 INT (interrupt) - prekid.
  • 3 KVITI (prestati) - izaći.
  • 6 ABRT (abort) - prekidi.
  • 9 KILL (ubojstvo koje se ne može uhvatiti, ne može se zanemariti)
  • 14 ALRM ( budilica) - alarm.
  • 15 TERM (signal završetka softvera) — Softver za zaustavljanje signala.

Ubiti

Naredba "pkill" omogućuje vam korištenje naprednih uzoraka regularnih izraza i drugih kriterija podudaranja. Umjesto korištenja PID-a, sada možete zatvoriti aplikaciju unosom naziva procesa. Na primjer, da biste ugasili preglednik Firefox, jednostavno pokrenite naredbu:

#pkill Firefox

Jer odgovara uzorku regularni izraz, također možete unijeti dio naziva procesa, ovako:

#pkillfire

Kako biste izbjegli "ubijanje" pogrešnih procesa, možete napraviti "pgrep -l [naziv_procesa]" za popis prihvatljivih procesa.

Naredba pkill ima mnogo više opcija, na primjer, ako navedete opciju "-u", omogućit će vam da navedete korisničko ime ili ID. U ovom primjeru šaljemo signal TERM svim procesima u vlasništvu korisnika 'nitko':

# pkill -u nitko

Killall

Killall koristi naziv procesa umjesto PID-a i "ubija" sve instance procesa s istim imenom. Na primjer, ako koristite više instanci Firefox preglednik, možete ih sve ubiti naredbom:

#killall firefox

U Gnomeu Nautilus možete ponovno pokrenuti naredbom:

#killallnautilus

xkill

Xkill je grafički"ubiti" aplikaciju. Kada unesete "XKill" u terminal, kursor miša će odmah postati "križić". Sve što trebate učiniti je pritisnuti "križić" na aplikaciji koja je uvredila i ona će odmah ubiti aplikaciju. Ako ste zainteresirani, možete dodati tipkovni prečac da omogućite značajku XKill.

Ostali signali koji se koriste

SIGABRT

Ovaj signal šalje signal procesu da prekine operaciju. ABRT je obično usmjeren na sam proces kada poziva funkciju abort() programskog jezika C da signalizira abnormalni prekid, ali može biti usmjeren iz bilo kojeg procesa kao i svaki drugi signal.

SIGALRM, SIGVTALRM i SIGPROF

ALRM, VTALRM i/ili PROF signal se šalje procesu kada je isteklo vremensko ograničenje određeno pozivom funkcije alarma (kao što je setitimer).

ALRM

Šalje se kada trenutno vrijeme ili sat prolazi.

VTALRM

Šalje se kada je CPU vrijeme koje proces koristi isteklo.

PROF

Šalje se kada istekne CPU vrijeme koje koriste proces i sustav u ime procesa.

SIGBUS

BUS signal se šalje procesu kada rezultira greškom sabirnice. Uvjeti koji rezultiraju ovim signalom, kao što je neusklađenost pristupa memoriji ili nedostatak fizičke adrese.

SIGCHLD

CHLD signal se šalje procesu kada proces dijete prekine, bude prekinut ili nastavi nakon prekida. Jedna uobičajena upotreba signala je signaliziranje OS-u da očisti resurse koje koristi proces dijete nakon što završi, bez eksplicitnog poziva sustava.

SIGCONT

Signal CONT upućuje operativni sustav da ponovno pokrene proces koji je prethodno obustavljen signalom STOP ili TSTP. Jedna od važnih značajki ovog signala je kontrola rada u Unix ljusci.

SIGFPE

FPE signal se šalje procesu kada on izvodi pogrešne aritmetičke operacije, kao što je dijeljenje s nulom.

SIGHUP

HUP signal se šalje procesu kada je njegov kontrolni terminal zatvoren. Izvorno je dizajniran za obavještavanje procesa nakon uzastopnih ispadanja linija (HUP je odgovoran za zastoje). U moderni sustavi, ovaj signal obično znači da je pseudo ili virtualna kontrola terminala zatvorena.

SIGIL

ILL signal koji se šalje procesu kada pokušava izvršiti zlonamjerne, nepoznate ili privilegirane naredbe (instrukcije).

SIGINT

INT signal se šalje procesu s upravljačkog terminala kada korisnik želi prekinuti proces. To se obično pokreće pritiskom na Control-C, ali na nekim sustavima, "delete" ili "break".

SIGKILL

KILL signal se šalje procesu da odmah prestane s radom. Za razliku od SIGTERM i SIGINT, ovaj signal se ne može uhvatiti ili zanemariti, a proces primanja ne može izvesti nikakvo čišćenje nakon primitka ovog signala.

SIGPIPE

PIPE signal se šalje procesu kada pokušava pisati u cijev bez procesa koji je povezan s drugim krajem.

SIGQUIT

Signal QUIT šalje se procesu s njegovog upravljačkog terminala kada korisnik od procesa zatraži da izvrši dump.

SIGSEGV

SEGV signal se šalje procesu kada napravi nevažeću referencu virtualne memorije ili pogrešku segmentacije, to jest kada izvrši kršenje segmentacije.

SIGSTOP

Signal STOP govori OS-u da zaustavi proces kako bi mogao nastaviti kasnije.

SIGTERM

Signal TERM šalje se procesu kako bi se zatražilo njegovo okončanje. Za razliku od "kill" signala, on se može interpretirati ili ignorirati tijekom procesa. Ovo omogućuje procesu da izvrši "lijepo" izvršenje kako bi zaustavio oslobađanje resursa i spremio stanje ako je potrebno. Treba napomenuti da je SIGINT gotovo identičan SIGTERM-u.

SIGTSTP

TSTP signal se šalje njegovom procesu kontrolnog terminala i govori mu da privremeno obustavi. Ovo se obično pokreće tako što korisnik pritisne Control-Z. Za razliku od SIGSTOP-a, ovaj proces može registrirati rukovatelja signalom ili ignorirati signal.

SIGTTIN i SIGTTOU

Signali TTIN i TTOU šalju se procesu kada pokušava čitati ili pisati s (tty) terminala u pozadini. U pravilu se taj signal može dobiti samo pomoću procesa pod kontrolom radna ploča; demoni nemaju upravljačke terminale i nikada ne bi trebali primiti ovaj signal.

SIGUSR1 i SIGUSR2

Signali USR1 i USR2 šalju se procesu i označavaju uvjete koje definira korisnik.

SIGPOLL

POLL signal se šalje procesu kada se dogodi asinkroni I/O događaj.

SIGSYS

Signal SYS šalje se procesu kada proslijedi loš argument pozivu sustava.

SIGTRAP

TRAP signal se šalje procesu kada se dogodi stanje za koje je program za ispravljanje pogrešaka zatražio da bude obaviješten—na primjer, kada se izvrši određena funkcija ili kada se promijeni određena vrijednost varijable.

SIGURG

URG signal se šalje procesu kada utičnica ima hitne podatke ili podatke koji su izvan dometa dostupni za čitanje.

SIGXCPU

XCPU signal se šalje procesu kada on koristi CPU duže od određene zadane točke koju je postavio korisnik. Dolazak XCPU signala osigurava da proces brzo sprema sve međurezultate i izlazi mnogo prije nego što ga operacijski sustav ubije signalom SIGKILL.

SIGXFSZ

XFSZ signal se šalje u procesu kada datoteka postane veća (pređe određenu vrijednost) od najveće dopuštene vrijednosti.

SIGRTMIN do SIGRTMAX

Signali RTMIN - RTMAX namijenjeni su za korištenje u prilagođene svrhe. Oni su signali u stvarnom vremenu.

Različiti signali

Sljedeći signali nisu standardizirani od strane POSIX-a, ali se ponekad koriste na nekim sustavima.

SIGEMT

EMT signal se šalje u procesu kada dođe do prekida emulatora.

SIGINFO

Signal INFO šalje se u tijeku kada se od upravljačkog terminala primi zahtjev za status.

SIGPWR

PWR signal se šalje u procesu kada sustav doživi nestanak struje.

SIGLOST

Signal LOST se šalje procesu kada se izgubi "zaključavanje datoteke".

SIGWINCH

WINCH signal se šalje procesu kada njegov upravljački terminal promijeni svoju veličinu.

Slanje signala s tipkovnice

Signali se mogu slati s tipkovnice. Dolje je navedeno nekoliko standardnih zadanih vrijednosti. Prema zadanim postavkama, tipkovnički prečaci za slanje signala prekida mogu se definirati pomoću naredbe stty.

CTRL-C

Pošalji SIGINT (prekid). Prema zadanim postavkama ovo uzrokuje prekid procesa.

CTRL-Z

Pošalji SIGTSTP (Obustavi). Prema zadanim postavkama, ovo uzrokuje da proces obustavi sve operacije.

CTRL-\

Pošalji SIGQUIT (Odustani). Prema zadanim postavkama, ovo uzrokuje trenutni prekid procesa i resetiranje kernela.

CTRL-T

Pošalji SIGINFO (INFO). Prema zadanim postavkama ovo uzrokuje da operativni sustav prikaže informacije o naredbi. Nije podržano na svim sustavima.

zaključak

Kada se aplikacije loše ponašaju i uzrokuju zamrzavanje sustava, vrlo je primamljivo ponovno pokrenuti računalo i pokrenuti sesiju iznova. Pomoću ovih naredbi "kill" možete bolje upravljati lošim ponašanjem aplikacija koje uzrokuju ili mogu uzrokovati pad sustava. Ovime zaključujem ovu temu "Naredba kill u Unixu/Linuxu".

Bilo kako bilo, prije ili kasnije suočimo se s potrebom da ugasimo buggy ili suspendirani proces u Linux. Da, da, neke se aplikacije u Linuxu ponekad zamrznu, unatoč njihovoj stabilnosti. U tim će slučajevima dobro doći prekrasan uslužni program Ubiti. Hajde da shvatimo kako koristiti ovaj uslužni program.

Svaki proces u Linux ima svoj identifikator tzv PID. Prije nego što zaustavite proces, morate ga definirati PID. Suština je da moramo pronaći ovaj identifikator, otvorimo, na primjer, bilo koji program i pokušajmo pronaći njegov identifikator.

Zaustavljen ID procesa

Za pretraživanje su nam potrebne naredbe ps i grep. Tim p.s- prikazat će nam popis aktivnih procesa u sustavu i informacije o njima, te naredbu grep- pretražit će rezultate naredbe p.s. Dakle, otvorimo terminal ( ctrl+alt+t) i pogledajte aktivne procese

p.s. axu

Kao što ste već primijetili, popis je vrlo velik i listanje kroz njega da bismo pronašli proces koji nam je potreban je gubitak vremena, za ovo ćemo koristiti prekrasan program grep. Da bismo pronašli proces koji nam je potreban, nakon unosa grep navedite aplikaciju koju tražimo. Na primjeru Vibera to izgleda ovako:

p.s. | grep viber pol 22685 0,0 1,9 647748 76620 ? Sl 13:01 0:04 /usr/bin/python /usr/bin/viberwrapper-indicator pol 22697 3.0 5.4 5402084 216120 ? Sl 13:01 4:52 /opt/viber/Viber pol 24068 0.0 0.0 17192 2216 bodova/0 S+ 15:41 0:00 grep --color=auto viber

U prvom redu pokrenuta aplikacija viberwrapper-indicator, možete pročitati o ovoj aplikaciji. Druga linija je sam Viber, koji ćemo danas “ugasiti”, ali koja je treća linija? Treći proces je sam proces grep, pošto smo naveli riječ viber kao parametar pretraživanja, a grep se našao u izlazu naredbe p.s.

Postoji još jedan lakši način da saznate PID proces je naredba pidof, koji uzima naziv procesa kao parametar i daje svoj PID. Pazite na velika i mala slova, ako naziv procesa počinje velikim slovom, a vi ga pišete malim slovom (ili obrnuto), tada pidof neće biti tu

pidof Viber

Kao što ste već primijetili, dobio sam 3 reda s aktivnom Viber aplikacijom

Završetak procesa ili jednostavnije rečeno “ubojstvo”

Sada znamo ID procesa Vibera i imamo priliku "ubiti" ga:

ubiti 22697

Općenito, naredba kill je namijenjena slanju signala procesu. Prema zadanim postavkama, ako ne navedemo nijedan atribut, šalje se signal SIGTERM (iz riječi termination). SIGTERM govori procesu da prekine. Svaki signal ima svoj broj. SIGTERM ima broj 15. Popis svih signala (i njihovih brojeva) koje naredba može poslati ubiti, može se izvesti trčanjem ubiti -l. Za slanje SIGKILL signala (brojčano 9) procesu 22697, pokrenite na naredbenom retku:

ubiti -9 22697

Signal SIGTERM možda neće zaustaviti proces (na primjer, ako je signal presretnut ili blokiran), ali SIGKILL uvijek ubija proces, budući da se ne može presresti ili ignorirati.
Izgled puni popis atributi se mogu izvršiti pokretanjem naredbe

ubiti -l

Zadaci i procesi

Sve što se izvodi u Linux program nazvao postupak. Linux kao multitasking sustav karakterizira činjenica da se mnogi procesi koji pripadaju jednom ili više korisnika mogu izvršavati istovremeno. Pomoću naredbe možete prikazati popis procesa koji se trenutno izvode p.s, na primjer, kako slijedi:

/home/larry# ps PID TT STAT TIME COMMAND 24 3 S 0:03 (bash) 161 3 R 0:00 ps /home/larry#

Napominjemo da prema zadanim postavkama naredba p.s prikazuje popis samo onih procesa koji pripadaju korisniku koji ga je pokrenuo. Da biste vidjeli sve procese koji se izvode u sustavu, morate izdati naredbu ps -a . Brojevi procesa(ID procesa ili PID), navedeni u prvom stupcu, jedinstveni su brojevi koje sustav dodjeljuje svakom pokrenutom procesu. Zadnji stupac pod naslovom COMMAND označava naziv naredbe koja se izvodi. U ovom slučaju popis sadrži procese koje je pokrenuo sam korisnik larry. Postoje mnogi drugi procesi koji se izvode u sustavu; njihov puni popis može se vidjeti pomoću naredbe ps-pomoćni. Međutim, među naredbama koje pokreće korisnik larry postoji samo bash (komandna ljuska za korisnika larry) i sama naredba p.s. Bash ljuska se može vidjeti kako radi istovremeno s naredbom p.s. Kada je korisnik unio naredbu p.s, bash shell ga je počeo izvršavati. Nakon momčadi p.s završio s radom (prikazuje se tablica procesa), kontrola se vraća na bash proces. Tada bash shell prikazuje upit i čeka novu naredbu.

Također se naziva i pokrenuti proces zadatak(posao). Pojmovi proces i zadatak koriste se naizmjenično. Međutim, obično se proces naziva zadatkom kada to znači upravljanje poslom(kontrola poslova). Kontrola poslova značajka je naredbene ljuske koja korisniku daje mogućnost prebacivanja između više poslova.

U većini slučajeva korisnici će pokrenuti samo jedan zadatak - to će biti zadnja naredba koju su unijeli u naredbenu ljusku. Međutim, mnoge ljuske (uključujući bash i tcsh) imaju funkcije upravljanje poslom(kontrola posla), omogućujući vam pokretanje nekoliko naredbi u isto vrijeme ili zadaci(poslovi) i po potrebi prelaziti između njih.

Upravljanje poslom može biti korisno ako, na primjer, uređujete veliki tekstualna datoteka i želite privremeno prekinuti uređivanje kako biste izvršili neku drugu radnju. Možete koristiti značajke upravljanja poslovima da privremeno napustite uređivač, vratite se na odzivnik ljuske i izvršite druge radnje. Kada završe, možete se vratiti na rad s uređivačem i pronaći ga u istom stanju u kojem je bio ostavljen. Postoji mnogo više korisnih upotreba za funkcije upravljanja poslom.

Način rada u prvom planu i pozadini

Zadaci mogu biti bilo koji prvi plan(prednji plan), ili pozadina(pozadina). U svakom trenutku može biti samo jedan zadatak u prvom planu. Zadatak u prvom planu je zadatak s kojim ste u interakciji; prima unos s tipkovnice i šalje izlaz na ekran (osim, naravno, ako niste preusmjerili unos ili izlaz negdje drugdje). Protiv, pozadinski poslovi ne primaju ulaz od terminala; Tipično, takvi poslovi ne zahtijevaju interakciju korisnika.

Nekim je zadacima potrebno jako dugo da se dovrše i ništa se zanimljivo ne događa dok se izvode. Primjer takvih zadataka je prevođenje programa, kao i sažimanje velike datoteke. Nema razloga buljiti u ekran i čekati da se ovi zadaci obave. Takve poslove treba izvoditi u pozadini. Za to vrijeme možete raditi s drugim programima.

Za kontrolu izvršavanja procesa u Linuxu postoji mehanizam prijenosa signale. Signal je sposobnost procesa da razmjenjuju standardne kratke poruke izravno koristeći sustav. Signalna poruka ne sadrži nikakve informacije osim signalnog broja (radi praktičnosti, umjesto broja može se koristiti ime koje je predefinirao sustav). Kako bi prenio signal, proces treba koristiti samo sistemski poziv ubiti(), a da biste primili signal, ne trebate ništa. Ako proces treba odgovoriti na signal na neki poseban način, može se registrirati rukovatelj, a ako nema rukovatelja, sustav će reagirati na to. Obično to uzrokuje trenutni prekid procesa koji je primio signal. Pokreće se rukovatelj signalima asinkrono, odmah po primitku signala, bez obzira na to što proces radi u tom trenutku.

Dva signala - broj 9 ( UBITI) i 19 ( STOP) - uvijek obrađuje sustav. Prvi od njih je potreban kako bi se sigurno ubio proces (otuda i naziv). Signal STOP obustavlja proces: u ovom stanju proces se ne uklanja iz tablice procesa, ali se ne izvršava dok ne primi signal 18 ( NASTAVAK) - nakon čega će nastaviti s radom. U Linux naredbenoj ljusci, signal STOP može se proslijediti aktivnom procesu pomoću izlazne sekvence Ctrl -Z .

Signalni broj 15 ( TERMIN) služi za prekid posla. Na prekid(prekid) proces posla umire. Poslovi se obično prekidaju escape sekvencom Ctrl -C. Ne postoji način da se obnovi prekinuti posao. Također biste trebali znati da neki programi presreću signal TERMIN(pomoću rukovatelja), tako da pritiskom na kombinaciju tipki Ctrl -C(o) ne može odmah prekinuti proces. To se radi kako bi program mogao uništiti tragove svog rada prije nego što završi. U praksi se neki programi uopće ne mogu prekinuti na ovaj način.

Prebacivanje u pozadinu i uništavanje poslova

Počnimo s jednostavan primjer. Pogledajmo naredbu yes, koja se na prvi pogled može činiti beskorisnom. Ova naredba šalje beskrajni niz nizova koji se sastoje od znaka y na standardni izlaz. Pogledajmo kako ova naredba radi:

/home/larry# da y y y y y

Niz takvih redaka nastavit će se beskonačno. Ovaj proces možete uništiti tako da mu pošaljete prekidni signal, tj. pritiskom na Ctrl -C. Učinimo stvari sada drugačije. Kako bismo spriječili da se ovaj beskonačni niz prikazuje na ekranu, preusmjerit ćemo standardni izlaz naredbe yes na /dev/null. Kao što možda znate, /dev/null uređaj djeluje kao "crna rupa": svi podaci poslani na ovaj uređaj su izgubljeni. Korištenje ovog uređaja vrlo je zgodno riješiti se previše izlaza iz nekih programa.

/home/larry# da > /dev/null

Sada se ništa ne prikazuje na ekranu. Međutim, prompt ljuske se također ne vraća. To je zato što se naredba yes još uvijek izvodi i šalje svoje poruke koje se sastoje od slova y u /dev/null. Također možete uništiti ovaj zadatak slanjem signala prekida.

Sada recimo da želite da naredba yes nastavi raditi, ali i da se vrati odzivnik ljuske na ekran kako biste mogli raditi s drugim programima. Da biste to učinili, možete prevesti naredbu yes na pozadinski način rada, i ona će tamo raditi bez komunikacije s vama.

Jedan od načina da se proces stavi u pozadinu je dodavanje & na kraj naredbe. Primjer:

/home/larry# da > /dev/null & + 164 /home/larry#

Poruka je broj posla(broj posla) za proces da. Naredbena ljuska dodjeljuje broj posla svakom poslu koji izvodi. Budući da je yes jedini izvršni posao, dodijeljen mu je broj 1. Broj 164 je identifikacijski broj povezan s ovim procesom (PID), a ovaj broj sustav također dodjeljuje procesu. Kao što ćemo vidjeti kasnije, procesu se može pristupiti navođenjem oba ova broja.

Dakle, sada imamo yes proces koji radi u pozadini, kontinuirano šaljući tok y na /dev/null uređaj. Da biste saznali status ovog procesa, morate izvršiti naredbu radnih mjesta, što je interna naredba ljuske.

/home/larry# poslovi + pokrenuti da >/dev/null & /home/larry#

Vidimo da ovaj program stvarno radi. Kako biste saznali status zadatka, također možete koristiti naredbu p.s, kao što je prikazano gore.

Da bi se prenio signal procesu (najčešće postoji potreba prekinuti posao posao) koristi se pomoćni program ubiti. Ova naredba dobiva ili broj posla ili PID kao argument. Neobavezni parametar je broj signala koji treba poslati procesu. Prema zadanim postavkama signal se šalje TERMIN. U gornjem slučaju, broj posla je bio 1, pa je naredba ubiti %1će prekinuti posao. Kada se poslu pristupi njegovim brojem (umjesto njegovim PID-om), tada prije tog broja in naredbeni redak morate staviti simbol postotka (“%”).

Sada unesite naredbu radnih mjesta ponovo za provjeru rezultata prethodne akcije:

/home/larry# poslovi Ukinuti da >/dev/null

Zapravo, posao je uništen, a kada sljedeći put unesete naredbu poslovi, na ekranu neće biti nikakvih informacija o tome.

Također možete prekinuti posao pomoću identifikacijskog broja procesa (PID). Ovaj broj, zajedno s identifikacijskim brojem posla, naznačen je kada posao započne. U našem primjeru vrijednost PID-a bila je 164, pa je naredba ubiti 164 bilo bi ekvivalentno naredbi ubiti %1. Kada koristite PID kao argument za kill naredbu, ne morate unijeti znak "%".

Pauziranje i nastavak poslova

Prvo započnimo proces s naredbom yes u prvom planu, kao što je to učinjeno prije:

/home/larry# da > /dev/null

Kao i prije, budući da se proces izvodi u prvom planu, prompt ljuske se ne vraća na zaslon.

Sada, umjesto da prekidate zadatak kombinacijom tipki Ctrl -C, zadatak je moguć obustaviti(suspendirati, doslovno - obustaviti), šaljući mu signal STOP. Da biste pauzirali zadatak, morate pritisnuti odgovarajuću kombinaciju tipki, obično ovu Ctrl -Z .

/home/larry# da > /dev/null Ctrl -Z+ Zaustavljeno da >/dev/null /home/larry#

Obustavljeni proces jednostavno se ne izvršava. Ne troši resurse procesora. Obustavljeni zadatak može se pokrenuti s iste točke kao da nije bio obustavljen.

Da biste nastavili s radom u prednjem planu, možete koristiti naredbu fg(od riječi foreground - prvi plan).

/home/larry# fg da >/dev/null

Naredbena ljuska ponovno će prikazati naziv naredbe kako bi korisnik znao na kojem se zadatku nalazi. ovaj trenutak pokrenut u prvi plan. Pauzirajmo ponovno ovaj zadatak pritiskom na tipke Ctrl -Z, ali ovaj put ga pokrenimo u pozadinu s naredbom bg(od riječi background - pozadina). To će uzrokovati pokretanje procesa kao da je pokrenut pomoću naredbe s & na kraju (kao što je učinjeno u prethodnom odjeljku):

/home/larry# bg + da $>$/dev/null & /home/larry#

Vraća se prompt ljuske. Sada ekipa radnih mjesta mora pokazati da proces Da zapravo trenutno radi; ovaj se proces može prekinuti naredbom ubiti, kao što se radilo i prije.

Ne možete koristiti tipkovni prečac za pauziranje zadatka koji se izvodi u pozadini Ctrl -Z. Prije pauziranja posla potrebno ga je naredbom staviti u prvi plan fg pa tek onda prestati. Dakle, zapovijed fg može se primijeniti ili na obustavljene poslove ili na posao koji se izvodi u pozadini.

Postoji velika razlika između pozadinskih poslova i suspendiranih poslova. Obustavljeni posao se ne izvodi - ne troši snagu procesora. Ovaj posao ne izvodi nikakvu radnju. Obustavljeni zadatak zauzima određenu količinu RAM-a računala; nakon nekog vremena kernel će ispumpati ovaj dio memorije u HDD « poste restante" Nasuprot tome, pozadinski posao se izvodi, koristi memoriju i radi neke stvari koje biste možda željeli učiniti, ali možda radite na drugim programima u isto vrijeme.

Poslovi koji se izvode u pozadini mogu pokušati prikazati neki tekst na ekranu. To će ometati rad na drugim zadacima.

/home/larry# da &

Ovdje standardni izlaz nije preusmjeren na /dev/null uređaj, tako da će beskrajni tok od y znakova biti ispisan na ekranu. Ova se nit ne može zaustaviti zbog kombinacije tipki Ctrl -C ne utječe na poslove u pozadini. Kako biste zaustavili ovaj izlaz, morate koristiti naredbu fg, koji će staviti zadatak u prvi plan, a zatim uništiti zadatak kombinacijom tipki Ctrl -C .

Napravimo još jednu napomenu. Obično timski fg i tim bg utjecati na one poslove koji su zadnji obustavljeni (ovi će poslovi biti označeni simbolom + pored broja posla ako unesete naredbu radnih mjesta). Ako se jedan ili više poslova izvodi u isto vrijeme, poslovi se mogu postaviti u prvi plan ili pozadinu navođenjem naredbi kao argumenata fg ili naredbe bg njihov identifikacijski broj (job ID). Na primjer, naredba fg %2 stavlja posao broj 2 na čelo i zapovjed bg %3 stavlja posao broj 3 u drugi plan. Koristite PID-ove kao argumente naredbe fg I bg Zabranjeno je.

Štoviše, da biste posao stavili u prvi plan, možete jednostavno odrediti njegov broj. Da, tim %2 bit će ekvivalent naredbi fg %2 .

Važno je zapamtiti da funkcija kontrole posla pripada ljusci. Timovi fg , bg I radnih mjesta su interni timoviškoljke. Ako iz nekog razloga koristite naredbenu ljusku koja ne podržava funkcije upravljanja poslovima, u njoj nećete pronaći ove (i slične) naredbe.



reci prijateljima