Juhend Kill, Pkill ja Killall käskude jaoks protsessi lõpetamiseks Linuxis


Linuxi operatsioonisüsteemil on protsessi lõpetamiseks käsk kill. Käsk võimaldab serveri käitamist jätkata ilma suurema muutuse/värskenduse taaskäivitamiseta. Siit tuleb Linuxi suur jõud ja see on üks põhjustest, miks Linux töötab planeedil 90% serveritest.

Tapa käsk saadab signaali, täpsustatud signaali, et protsess oleks täiuslikum. Kill-käsku saab käivitada mitmel viisil, otse või shelliskripti abil.

Käsu kill/käsk/usr/bin kasutamine annab teile lisafunktsiooni protsessi tapmiseks protsessi nime järgi pkilli abil.

Tapa käsu tavaline süntaks on:

# kill [signal or option] PID(s)

Tapmise käsu korral võib signaali nimi olla:

Signal Name		Signal Value			Behaviour

SIGHUP			      1				Hangup
SIGKILL			      9				Kill Signal
SIGTERM			      15			Terminate

SIGTERM-i kohal olevast käitumisest nähtub, et see on vaikimisi ja ohutum viis protsessi tapmiseks. SIGHUP on vähem turvaline viis protsessi tapmiseks kui SIGTERM. SIGKILL on ülaltoodud kolme hulgas kõige ebaturvalisem viis tappa protsess, mis lõpetab protsessi ilma salvestamata.

Protsessi tapmiseks peame teadma protsessi protsessi ID-d. Protsess on programmi eksemplar. Iga kord, kui programm käivitatakse, luuakse selle protsessi jaoks automaatselt kordumatu PID.

Igal Linuxi protsessil on pid. Esimene protsess, mis algab Linuxi süsteemi käivitamisel, on init-protsess, seega omistatakse sellele enamikul juhtudel väärtus ‘1’.

Init on põhiprotsess ja seda ei saa sel viisil tappa, mis tagab, et põhiprotsessi ei tapeta kogemata. Init otsustab ja laseb end tappa, kus tapmine on lihtsalt sulgemise taotlus.

Kõigi protsesside ja vastavalt neile määratud pidamise teadmiseks käivitage järgmine käsk ps.

# ps -A
PID TTY          TIME CMD
    1 ?        00:00:01 init
    2 ?        00:00:00 kthreadd
    3 ?        00:00:00 migration/0
    4 ?        00:00:00 ksoftirqd/0
    5 ?        00:00:00 migration/0
    6 ?        00:00:00 watchdog/0
    7 ?        00:00:01 events/0
    8 ?        00:00:00 cgroup
    9 ?        00:00:00 khelper
   10 ?        00:00:00 netns
   11 ?        00:00:00 async/mgr
   12 ?        00:00:00 pm
   13 ?        00:00:00 sync_supers
   14 ?        00:00:00 bdi-default
   15 ?        00:00:00 kintegrityd/0
   16 ?        00:00:00 kblockd/0
   17 ?        00:00:00 kacpid
   18 ?        00:00:00 kacpi_notify
   19 ?        00:00:00 kacpi_hotplug
   20 ?        00:00:00 ata/0
   21 ?        00:00:00 ata_aux
   22 ?        00:00:00 ksuspend_usbd

Kuidas oleks ülaltoodud väljundi kohandamisega, kasutades süntaksit pidof-protsessina.

# pidof mysqld
1684

Teine võimalus ülaltoodud eesmärgi saavutamiseks on järgida alltoodud süntaksit.

# ps aux | grep mysqld
root      1582  0.0  0.0   5116  1408 ?        S    09:49   0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
mysql     1684  0.1  0.5 136884 21844 ?        Sl   09:49   1:09 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
root     20844  0.0  0.0   4356   740 pts/0    S+   21:39   0:00 grep mysqld

Enne kui astume ette ja tapmiskäsku täidame, tuleb märkida mõned olulised punktid:

  1. Kasutaja võib tappa kogu oma protsessi.
  2. Kasutaja ei saa teise kasutaja protsessi tappa.
  3. Kasutaja ei saa tappa protsesse, mida süsteem kasutab.
  4. Juurkasutaja võib tappa süsteemitaseme protsessi ja kõigi kasutajate protsessid.

Teine viis sama funktsiooni täitmiseks on käsu ‘pgrep’ täitmine.

# pgrep mysql
3139

Eespool nimetatud PID-i tapmiseks kasutage käsku kill nagu näidatud.

kill -9 3139

Ülaltoodud käsk tapab protsessi, mille pid = 3139, kus PID on protsessi arvuline väärtus.

Teine võimalus sama funktsiooni täitmiseks saab ümber kirjutada kui.

# kill -SIGTERM 3139

Samamoodi sarnaneb ‘kill -9 PID’ ‘kill -SIGKILL PID’ -ga ja vastupidi.

Enne protsessi nime valetamist ja valet sisestamist peate protsessi nimest teadlik olema.

# pkill mysqld

Tapa mitu protsessi korraga.

# kill PID1 PID2 PID3

or

# kill -9 PID1 PID2 PID3

or

# kill -SIGKILL PID1 PID2 PID3

Mis siis, kui protsessil on liiga palju eksemplare ja palju alamprotsesse, on meil käsk ‘killall’. See on selle perekonna ainus käsk, mis võtab protsessi numbri asemel argumendina protsessi nime.

# killall [signal or option] Process Name

Kõigi mysql-i eksemplaride ja alamprotsesside tapmiseks kasutage käsku järgmiselt.

# killall mysqld

Protsessi oleku saate alati kontrollida, kui see töötab või mitte, kasutades mõnda järgmistest käskudest.

# service mysql status
# pgrep mysql
# ps -aux | grep mysql

See on minu pooleks praegu kõik. Varsti olen jälle siin ühe teise huvitava ja informatiivse teemaga. Kuni selle ajani olge kursis, Tecmintiga ühendatud ja terve. Ärge unustage kommentaaride jaotises oma väärtuslikku tagasisidet anda.