Signaalid ja kill: Difference between revisions

From ICO wiki
Jump to navigationJump to search
(struktuuri parandamine)
 
(12 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Autorid ==
'''Signaalid''' on UNIX-tüüpi operatsioonisüsteemides asünkroonsed sõnumid, mida kasutatakse, et protsessi millestki teavitada. Asünkroonsus tähendab seda, et sõnumid võivad sündmustena aset leida mistahes ajahetkel.<ref name="gr">[https://www.csd.uoc.gr/~hy345/assignments/2013/cs345_front1.pdf CS345 OPERATING SYSTEMS System calls & Signals Panagiotis Papadopoulos, Τμήμα Επιστήμης Υπολογιστών]</ref>
Ulvar Petmanson, AK22, 2011
 
Henri Paves, AK21, 2017


== Sissejuhatus ==
'''Kill''' on käsk, millega saab neid signaale saata.


UNIX-tüüpi op. süsteemides on signaalid on asünkroonsed sõnumid, mida kasutatakse, et protsessi millestki teavitada. Asünkroonsus tähendab seda, et sõnumid võivad sündmustena aset leida mistahes ajahetkel.<ref>[https://www.csd.uoc.gr/~hy345/assignments/2013/cs345_front1.pdf CS345 OPERATING SYSTEMS System calls & Signals Panagiotis Papadopoulos, Τμήμα Επιστήμης Υπολογιστών]</ref>
== Eeldused ==


Järgnevalt pisut juttu sellest, mismoodi signaalid töötavad ja lõpus mõned näited, kuidas neid ise kasutada saab. Artikkel eeldab, et lugeja on varem UNIX-tüüpi op. süsteemi näinud ning teab, mis on protsessid ja shell.
Käesolev artikkel räägib kuidas signaalid töötavad ja toob mõned näited, kuidas neid ise kasutada saab. Teeme kerge kõrvalepõike ka muudele signaalidega seotud käskudele. Artikkel eeldab, et lugeja on varem UNIX-tüüpi operatsioonisüsteemi näinud ning teab, mis on protsessid ja shell.


== Signaalid ==
== Signaalid ==
Line 43: Line 40:
Tegelikult on protsessil veel üks võimalus, ta võib lasta tuumal blokeerida mingi kindla signaali kohale toimetamise. Kui signaal on blokeeritud, siis singaal genereeritakse ikka, aga ta jääb ootele. Signaal toimetatakse kohale alles siis, kui protsess blokeeringu maha võtab. Signaali blokeerimist kasutatakse koodi kriitilistes kohtades, kus programm ei tohi peatuda.
Tegelikult on protsessil veel üks võimalus, ta võib lasta tuumal blokeerida mingi kindla signaali kohale toimetamise. Kui signaal on blokeeritud, siis singaal genereeritakse ikka, aga ta jääb ootele. Signaal toimetatakse kohale alles siis, kui protsess blokeeringu maha võtab. Signaali blokeerimist kasutatakse koodi kriitilistes kohtades, kus programm ei tohi peatuda.


== Signaalide käsitsi saatmine ==
== Signaalide saatmine kiirsõrmistega ==


Lihtsaim viis saata signaale terminalis esiplaanil töötavale protsessile on kasutada klaviatuuri:
Lihtsaim viis saata signaale terminalis esiplaanil töötavale protsessile on kasutada klaviatuuri:
Line 49: Line 46:
''Ctrl+C'': protsessile saadetakse signaal ''SIGINT'' (protsessi töö katkestatakse)
''Ctrl+C'': protsessile saadetakse signaal ''SIGINT'' (protsessi töö katkestatakse)


''Ctrl+Z'': protsessile saadetakse singaal ''SIGTSTP'' (protsess pannakse ajutiselt seisma, kontroll antakse tagasi shellile). Protsessi saab tagasi esiplaanile tuua käsuga '''fg'''
''Ctrl+Z'': protsessile saadetakse singaal ''SIGTSTP'' (protsess pannakse ajutiselt seisma, kontroll antakse tagasi shellile). Protsessi saab tagasi esiplaanile tuua käsuga '''fg'''.


== Protsessi tuvastamine ==
== Protsessi tuvastamine ==


Protsessile saab saata signaali teades tema täielikku nime, või siis tema protsessi ID'd ('''pid''').  
Protsessile saab saata signaali teades tema täielikku nime, või siis tema protsessi ID'd ('''pid''')<ref>[http://man7.org/linux/man-pages/man1/pidof.1.html pidof(1)]</ref>.  


Kui tead, mis on protsessi *täpne* nimi, nt "skypeforlinux", mitte lihtsalt "skype", siis saab seprotsessi IDid'i leida käsuga:
Kui tead, mis on protsessi *täpne* nimi, nt "skypeforlinux", mitte lihtsalt "skype", siis saab seprotsessi IDid'i leida käsuga:
   pidof ''protsessi täisnimi''
   pidof ''protsessi_täisnimi''


Kui sa protsessi pid'i ei tea, siis saab selle leida käsuga '''ps'''. See on üldiselt praktilisem lahendus kui eelmine, sest nagu eelnevast näitest selgus, on tarkvara ja selle protsessi nimi tihtipeale teineteisest erinevad.
Protsessi pid'i saab leida ka käsuga '''ps'''<ref>[http://man7.org/linux/man-pages/man1/ps.1.html ps(1)]</ref>. See on üldiselt praktilisem lahendus kui eelmine, sest nagu eelnevast näitest selgus, on tarkvara ja selle protsessi nimi tihtipeale teineteisest erinevad.


Et näha protsesse enda kasutaja alt:
Et näha protsesse enda kasutaja alt:
Line 70: Line 67:


Filtreerimiseks kasuta grep'i:
Filtreerimiseks kasuta grep'i:
   ps -aux | grep ''protsessi nimi või nimeosa''
   ps -aux | grep ''protsessi_nimi_või_nimeosa''


Huvitav trivia -- käsk ps ilma argumentideta näitab meie terminali id'd ja ka mitmenda terminali instantsiga tegu
Trivia -- käsk ps ilma argumentideta näitab meie terminali pid'i ja ka mitmenda terminali instantsiga tegu


== Kill ==
== Kill ==
=== Kill põhifunktsioonid ===


Signaalide saatmiseks shelli käsurealt või skriptist kasutatakse käsku '''kill'''.  
Signaalide saatmiseks shelli käsurealt või skriptist kasutatakse käsku '''kill'''.  
Line 80: Line 78:
Et näha erinevate signaalitüüpide valikut, tuleb trükkida<ref>[http://man7.org/linux/man-pages/man1/kill.1.html kill(1)]</ref>:
Et näha erinevate signaalitüüpide valikut, tuleb trükkida<ref>[http://man7.org/linux/man-pages/man1/kill.1.html kill(1)]</ref>:
   kill -l
   kill -l
Signaalitüüpe on väga palju. Linux Mint all koguni 64 tükki.


Kõige levinumad käsurealt saadetavad signaalid on SIGTERM ja SIGKILL, mida tähistavad vastavalt numbrid 15 ja 9.
Kõige levinumad käsurealt saadetavad signaalid on SIGTERM ja SIGKILL, mida tähistavad vastavalt numbrid 15 ja 9.
Line 89: Line 89:
   kill -9 564
   kill -9 564


Kill käsu süntaks on väga paindlik. Katsetamise tulemusel leidsin, et sama tulemuse annavad kõik järgnevad käsud<ref>[https://www.youtube.com/watch?v=lP7xoqkqDZQ Linux Sysadmin Basics -- 6.1 Process Signals]</ref>:
Kill käsu süntaks on väga paindlik. SIGTERM signaali katsetamisel leidsin, et sama tulemuse annavad kõik järgnevad käsud<ref>[https://www.youtube.com/watch?v=lP7xoqkqDZQ Linux Sysadmin Basics -- 6.1 Process Signals]</ref>:
   kill -SIGTERM 564
   kill -SIGTERM 564


Line 106: Line 106:
   kill -15 564
   kill -15 564


Kuna kill omab vaikeväärtust 15, annab sama tulemuse ka:
Kuna kill omab vaikeväärtust 15, annab SIGTERM puhul sama tulemuse ka:
   kill 564
   kill 564


Huvitaval kombel eksisteerib ka signaal 0, millest linuxi man lehed ei räägi.
Muid signaale saates tuleb alati lisaparameetrit kasutada.
  kill -0 564
 
Antud signaal ei tee näiliselt mitte midagi. Samas kui sellele ette anda mitteeksisteeriv pid, või kasutada muud defineerimata kill parameetrit, näiteks -65, siis saame veateate. Ilmselt kontrollib -0 signaal, kas antud protsessile saab üldse signaali saata.


== Kill muud kasutused ==
=== Kill muud kasutused ===


Muude huvitavamate signaalide alla kuuluvad näiteks SIGSTOP (19) ja SIGCONT(18), millega saab protsesse peatada (mitte sulgega) ja siis taaskäivitada. Eriti põnev, et vähemalt Linux Mint jättis peatatud olekus terminalile antud sisendi meelde. Ehk siis peatasin ühe terminaliga teise:
Muude huvitavamate signaalide alla kuuluvad näiteks SIGSTOP (19) ja SIGCONT (18), millega saab protsesse peatada (mitte "sulgeda") ja siis lubada peatatud protsessil jätkata (mitte "taaskäivituda"). Eriti põnev, et vähemalt Linux Mint jättis peatatud olekus terminalile antud sisendi meelde. Ehk siis peatasin ühe terminaliga teise:
   kill -19 20014
   kill -19 20014
Trükkisin peatatud terminali "htop" ja lõin enterit. Midagi ei juhtunud. Lülitusin tagasi teise terminali ja trükkisin:
Trükkisin peatatud terminali "htop" ja lõin enterit. Midagi ei juhtunud. Lülitusin tagasi teise terminali ja trükkisin:
   kill -18 20014
   kill -18 20014
Peatatud terminalil viskus koheselt lahti programm htop.
Peatatud terminalis viskus koheselt lahti programm htop.


Et saata internetiteenuste serverile (inetd) signaal, et ta oma konfiguratsioonifaili uuesti sisse laeks:
Et saata internetiteenuste serverile (inetd) signaal, et ta oma konfiguratsioonifaili uuesti sisse laeks:
   kill -s HUP ''inetd pid''
   kill -s HUP ''inetd_pid''
 
=== Kill peidetud funktsioonid ===
 
Tegelikult eksisteerib ka signaal 0, millest linuxi man lehed ei räägi<ref name="gr"></ref>.
  kill -0 564
 
Antud signaal ei tee näiliselt mitte midagi. Samas kui sellele ette anda mitteeksisteeriv pid, või kasutada muud defineerimata kill parameetrit, näiteks -65, siis saame veateate. Ilmselt kontrollib -0 signaal, kas antud protsessile saab üldse signaali saata.
 
Ka on väga huvitav, et signaali numbrit signaali nimeks konvertiv käsk...
  kill -l 0
...annab vastuseks lihtsalt suure '''T'''. Kui muudel juhtudel saab signaalinumbrit signaali nimega käsus asendada, siis T'd kasutada proovides saame veateate.


== Killall ==
== Killall ==


Teatud tarkvarad (nt Chrome) kipuvad tekitama endast hästi palju protsesse, millele on ühekaupa väga tüütu signaale saata. Appi tuleb käsk '''killall''', mis saadab signaali kõikidele protsessidele nime järgi.
Teatud tarkvarad (nt Chrome) kipuvad tekitama endast hästi palju protsesse, millele on ühekaupa väga tüütu signaale saata. Appi tuleb käsk '''killall'''<ref>[http://man7.org/linux/man-pages/man1/killall.1.html killall(1)]</ref>, mis saadab signaali kõikidele protsessidele nime järgi.
   killall ''protsessi täisnimi''
   killall ''protsessi_täisnimi''


== Pkill ==
== Pkill ==


Kui tahad natuke peenemalt tuunida kui ühekaupa (kill), või kõiki korraga (killall), siis on olemas ka pkill.
Kui tahad natuke peenemalt tuunida kui ühekaupa (kill), või kõiki korraga (killall), siis on olemas ka '''pkill'''<ref>[http://man7.org/linux/man-pages/man1/pgrep.1.html pgrep(1)]</ref>.


Tapa kõik ühe teatud kasutaja protsessid:
Tapa kõik ühe teatud kasutaja protsessid:
Line 144: Line 152:
== Graafiline kill ==
== Graafiline kill ==


See sõltub ilmselt päris palju distrost, aga vajuta ALT+F2. Trüki tekkivasse aknasse '''xkill''' ja löö enterit. Hiirekursor muutub ristiks. Selle ristiga graafilisele aknale klõpstates protsess tapetakse.
Graafilise killi käivitamine sõltub ilmselt päris palju distrost, aga vajuta ALT+F2. Trüki tekkivasse aknasse '''xkill''' ja löö enterit. Hiirekursor muutub ristiks. Selle ristiga graafilisele aknale klõpstates protsess tapetakse.
 
== Kokkuvõte ==


Nimekirja linuxis kasutatavatest signaalidest leiab näiteks trükkides:<ref>[http://man7.org/linux/man-pages/man7/signal.7.html signal(7)]</ref>
== Ma ei leidnud MAN'i lugedes mida tahtsin ==
  man 7 signal


Siit tuleb jällegi välja omakorda huvitav nüanss, et linuxi käskudel võib olla mitu man legekülge. Nimekirja nägemiseks trüki:
Siit tuleb jällegi välja omakorda huvitav nüanss, et linuxi käskudel võib olla mitu man lehekülge. Signal lehtede nimekirja nägemiseks trüki:
   man -k "^signal"
   man -k "^signal"
Ka kill käsul on mitu man lehekülge.
Ka kill käsul on mitu man lehekülge.
   man -k "^kill"
   man -k "^kill"


Tasub siiski alati kontrollida, millised on konkreetses süsteemis kasutusel kasutades käsku:  
== Kokkuvõte ==
Kill käsk ei ole üksnes protsesside tapmiseks, vaid selle abil saab saata erinevaid signaale.
 
Enne signaali saatmist oleks kasulik siiski alati kontrollida, millised signaalid on konkreetses süsteemis kasutusel:  
   kill -l
   kill -l


Ja isegi kui kõik vajalikud parameetrid on välja uuritud, tasuks ikkagi kaaluda kas SIGKILL käsk end hetkel õigustab.<ref>[http://turnoff.us/geek/dont-sigkill/ The Real Reason to Not Use SIGKILL]</ref>
Kill käsuga elavad lähedases sümbioosis käsud '''ps''' ja '''grep''', mille abil saame lihtsasti tuvastada otsitava protsessi pid'i:
  ps -aux | grep ''protsessi_nimi_või_nimeosa''
 
Ja isegi kui kõik vajalikud parameetrid on välja uuritud, tasuks ikkagi kaaluda kas SIGKILL ehk -9 end hetkel õigustab.<ref>[http://turnoff.us/geek/dont-sigkill/ The Real Reason to Not Use SIGKILL]</ref>
 
== Autorid ==
 
Ulvar Petmanson, AK22, 2011
 
Henri Paves, AK21, 2017, v2.0


==Viited==
==Viited==

Latest revision as of 15:00, 7 November 2017

Signaalid on UNIX-tüüpi operatsioonisüsteemides asünkroonsed sõnumid, mida kasutatakse, et protsessi millestki teavitada. Asünkroonsus tähendab seda, et sõnumid võivad sündmustena aset leida mistahes ajahetkel.[1]

Kill on käsk, millega saab neid signaale saata.

Eeldused

Käesolev artikkel räägib kuidas signaalid töötavad ja toob mõned näited, kuidas neid ise kasutada saab. Teeme kerge kõrvalepõike ka muudele signaalidega seotud käskudele. Artikkel eeldab, et lugeja on varem UNIX-tüüpi operatsioonisüsteemi näinud ning teab, mis on protsessid ja shell.

Signaalid

Signaalid saadetakse alati tuuma poolt, kuid algatus võib tulla:

  • teistelt protsessidelt (kasutades "kill" käsku)
  • protsessilt endalt. Siia alla käivad ka riistvaralised erandid. Näiteks nulliga jagamise puhul või kui üritatakse pöörduda eraldamata mäluruumi poole, saadetakse signaal vigasele programmile.
  • tuumalt. Tuum kasutab signaale, et teavitada protsessi teatud süsteemsetest sündmustest. Kui protsess tellib omale "süsteemse äratuse", ka siis saadab tuum protsessile singaali, iga kord, kui aeg täis saab (nt. iga 10 sek tagant).

Mis juhtub, kui protsess saab signaali? See sõltub: protsess saab iga signaali kohta määrata, mida tuum sellega tegema peab, kas:

  • ignoreerida: Signaali saades ei juhtu midagi. Signaali ignoreerimine peab olema enne selle signaali saamist tellitud. Kõiki signaale ei saa eirata.
  • kinni püüda: Sel puhul kutsub tuum välja defineeritud erirutiini. See erirutiin peab olema enne signaali saatmist registreeritud.
  • kasutada vaikimisi sätteid: Igale signaalile on süsteemselt määratud vaikimisi toiming, mis täidetakse, kui protsess ei ole sellele signaalile ignoreerimist või erikohtlemist tellinud.

Üldistavalt toimub signaali saatmine nii:

  • 1. Kui protsess saab signaali, mida ei ignoreerita, siis programmi täitmine katkestatakse
  • 2. Kontroll antakse üle vastavale singaalihändlerile
  • 3. Peale signaalihändleri töö lõpetamist jätkatakse programmi sealt, kus pooleli jäädi.

Signaali saab saata ainutl protsessile, mis on sinu oma. Kui üritada saata signaali kellegi teise protsessile, siis seda ignoreeritakse. Erandiks on siinkohal root-kasutaja, kes saab saata signaale kõigi protsessidele.

Praktikas on signaali saatmise mehhanism natuke keerukam ja koosneb kahest sammus: signaali genereerimine ja signaali kohaletoimetamine. Tuum genereerib protsessi jaoks signaali lihtsalt nii, et seab üles lipu, mis näitab, millise signaalitüübiga on tegu. Täpsemalt, igal protsessil on mäluosa, mida kasutatakse ootavate signaalide jaoks. Süsteemi jaoks tähendab signaali tekitamine lihtsalt õige biti (vastavalt signaali tüübile) muutmist selles mäluosas. Sellest hetkest on signaal ootel. Enne kasutajaruumi protsessile kontrolli üle andmist, kontrollib tuum alati, kas protsessil on ootel signaale. Kui avastatakse ootel signaal, siis süsteem toimetab selle signaali kohale ühel järgnevatest viisidest:

  • kui signaaliks on SIGKILL, siis tapetakse protsess ära,
  • kui signaaliks on SIGSTOP, siis peatatakse protsess ja pannakse magama,
  • kui protsess ei registreerinud selle signaali jaoks ühtki erihändlerit, siis tehakse vaikimisi toiming. Kui vaikimisi toiming on ingoreerimine, siis ei tehta midagi ja süsteem lülitub tagasi kasutajarežiimi ja annab kontrolli protsessile üle. Kui vaikimisi toiming ei ole signaali eiramine, siis jäädakse tuumarežiimi ja protsess sulgetakse, tehakse tõmmis (core dump) või protsess peatatakse.
  • kui protsess on registreerinud sellele signaalile erihändleri, siis annab tuum kontrolli tagasi protsessile ja kasutajarežiimis käivitatakse signaali erihändler. Siit jääb signaali töötlemine protsessi enda kanda.

Tähele tasub panna, et tuum käivitab singaalihändleri siis, kui signaal kohale toimetatakse, mitte siis, kui signaal genereeritakse. Signaali kohaletoimetamine toimub vaid hetkel, kui sihtprotsess muudetakse aktiivseks. Ehk, signaali tekitamise kohaletoimetamise vahel võib olla märgatav ajaline vahe.

Tegelikult on protsessil veel üks võimalus, ta võib lasta tuumal blokeerida mingi kindla signaali kohale toimetamise. Kui signaal on blokeeritud, siis singaal genereeritakse ikka, aga ta jääb ootele. Signaal toimetatakse kohale alles siis, kui protsess blokeeringu maha võtab. Signaali blokeerimist kasutatakse koodi kriitilistes kohtades, kus programm ei tohi peatuda.

Signaalide saatmine kiirsõrmistega

Lihtsaim viis saata signaale terminalis esiplaanil töötavale protsessile on kasutada klaviatuuri:

Ctrl+C: protsessile saadetakse signaal SIGINT (protsessi töö katkestatakse)

Ctrl+Z: protsessile saadetakse singaal SIGTSTP (protsess pannakse ajutiselt seisma, kontroll antakse tagasi shellile). Protsessi saab tagasi esiplaanile tuua käsuga fg.

Protsessi tuvastamine

Protsessile saab saata signaali teades tema täielikku nime, või siis tema protsessi ID'd (pid)[2].

Kui tead, mis on protsessi *täpne* nimi, nt "skypeforlinux", mitte lihtsalt "skype", siis saab seprotsessi IDid'i leida käsuga:

 pidof protsessi_täisnimi

Protsessi pid'i saab leida ka käsuga ps[3]. See on üldiselt praktilisem lahendus kui eelmine, sest nagu eelnevast näitest selgus, on tarkvara ja selle protsessi nimi tihtipeale teineteisest erinevad.

Et näha protsesse enda kasutaja alt:

 ps -ux

Et näha protsesse kõikide kasutajate alt:

 ps -aux

Et näha protsesse kindla kasutaja alt:

 ps -U kasutajanimi

Filtreerimiseks kasuta grep'i:

 ps -aux | grep protsessi_nimi_või_nimeosa

Trivia -- käsk ps ilma argumentideta näitab meie terminali pid'i ja ka mitmenda terminali instantsiga tegu

Kill

Kill põhifunktsioonid

Signaalide saatmiseks shelli käsurealt või skriptist kasutatakse käsku kill.

Et näha erinevate signaalitüüpide valikut, tuleb trükkida[4]:

 kill -l

Signaalitüüpe on väga palju. Linux Mint all koguni 64 tükki.

Kõige levinumad käsurealt saadetavad signaalid on SIGTERM ja SIGKILL, mida tähistavad vastavalt numbrid 15 ja 9.

Et tappa protsess pid'ga 564 ja lubada tal ennast korralikult sulgeda (saadetakse signaal SIGTERM). Kuna SIGTERM on kill käsu vaikimisi käitumine, ei ole käsule ette vaja anda muud parameetrit kui pid:

 kill 564

Et tappa protsess jõuga (ilma et protsess ise saaks ennast lõpetada, signaal SIGKILL), tuleb lisada kill käsule parameeter -9:

 kill -9 564

Kill käsu süntaks on väga paindlik. SIGTERM signaali katsetamisel leidsin, et sama tulemuse annavad kõik järgnevad käsud[5]:

 kill -SIGTERM 564
 kill -s TERM 564
 kill -TERM 564
 kill -sigterm 564
 kill -s term 564
 kill -term 564
 kill -s 15 564
 kill -15 564

Kuna kill omab vaikeväärtust 15, annab SIGTERM puhul sama tulemuse ka:

 kill 564

Muid signaale saates tuleb alati lisaparameetrit kasutada.

Kill muud kasutused

Muude huvitavamate signaalide alla kuuluvad näiteks SIGSTOP (19) ja SIGCONT (18), millega saab protsesse peatada (mitte "sulgeda") ja siis lubada peatatud protsessil jätkata (mitte "taaskäivituda"). Eriti põnev, et vähemalt Linux Mint jättis peatatud olekus terminalile antud sisendi meelde. Ehk siis peatasin ühe terminaliga teise:

 kill -19 20014

Trükkisin peatatud terminali "htop" ja lõin enterit. Midagi ei juhtunud. Lülitusin tagasi teise terminali ja trükkisin:

 kill -18 20014

Peatatud terminalis viskus koheselt lahti programm htop.

Et saata internetiteenuste serverile (inetd) signaal, et ta oma konfiguratsioonifaili uuesti sisse laeks:

 kill -s HUP inetd_pid

Kill peidetud funktsioonid

Tegelikult eksisteerib ka signaal 0, millest linuxi man lehed ei räägi[1].

 kill -0 564

Antud signaal ei tee näiliselt mitte midagi. Samas kui sellele ette anda mitteeksisteeriv pid, või kasutada muud defineerimata kill parameetrit, näiteks -65, siis saame veateate. Ilmselt kontrollib -0 signaal, kas antud protsessile saab üldse signaali saata.

Ka on väga huvitav, et signaali numbrit signaali nimeks konvertiv käsk...

 kill -l 0

...annab vastuseks lihtsalt suure T. Kui muudel juhtudel saab signaalinumbrit signaali nimega käsus asendada, siis T'd kasutada proovides saame veateate.

Killall

Teatud tarkvarad (nt Chrome) kipuvad tekitama endast hästi palju protsesse, millele on ühekaupa väga tüütu signaale saata. Appi tuleb käsk killall[6], mis saadab signaali kõikidele protsessidele nime järgi.

 killall protsessi_täisnimi

Pkill

Kui tahad natuke peenemalt tuunida kui ühekaupa (kill), või kõiki korraga (killall), siis on olemas ka pkill[7].

Tapa kõik ühe teatud kasutaja protsessid:

 pkill -u kasutajanimi

Et näha mida selline käsk leiab, uuri enne käsuga:

 pgrep -u kasutajanimi

Tegu on väga paindliku käsuga, mis vajaks ilmselt omaette artiklit.

Graafiline kill

Graafilise killi käivitamine sõltub ilmselt päris palju distrost, aga vajuta ALT+F2. Trüki tekkivasse aknasse xkill ja löö enterit. Hiirekursor muutub ristiks. Selle ristiga graafilisele aknale klõpstates protsess tapetakse.

Ma ei leidnud MAN'i lugedes mida tahtsin

Siit tuleb jällegi välja omakorda huvitav nüanss, et linuxi käskudel võib olla mitu man lehekülge. Signal lehtede nimekirja nägemiseks trüki:

 man -k "^signal"

Ka kill käsul on mitu man lehekülge.

 man -k "^kill"

Kokkuvõte

Kill käsk ei ole üksnes protsesside tapmiseks, vaid selle abil saab saata erinevaid signaale.

Enne signaali saatmist oleks kasulik siiski alati kontrollida, millised signaalid on konkreetses süsteemis kasutusel:

 kill -l

Kill käsuga elavad lähedases sümbioosis käsud ps ja grep, mille abil saame lihtsasti tuvastada otsitava protsessi pid'i:

 ps -aux | grep protsessi_nimi_või_nimeosa

Ja isegi kui kõik vajalikud parameetrid on välja uuritud, tasuks ikkagi kaaluda kas SIGKILL ehk -9 end hetkel õigustab.[8]

Autorid

Ulvar Petmanson, AK22, 2011

Henri Paves, AK21, 2017, v2.0

Viited

http://ph7spot.com/musings/introduction-to-unix-signals-and-system-calls

http://www.bsd.ee/handbook/x3750.html

http://www.cyberciti.biz/faq/unix-kill-command-examples/