Ceļvedis komandām Kill, Pkill un Killall, lai izbeigtu procesu Linux


Lai pārtrauktu procesu, Linux operētājsistēmai ir komandai kill. Komanda ļauj turpināt servera palaišanu bez nepieciešamības atsāknēt pēc būtiskām izmaiņām/atjaunināšanas. Šeit parādās Linux lielais spēks, un tas ir viens no iemesliem, kāpēc Linux darbojas uz 90% serveru uz planētas.

Kill komanda nosūta signālu, norādītu signālu, lai process būtu pilnīgāks. Komandu kill var izpildīt vairākos veidos, tieši vai izmantojot čaulas skriptu.

Izmantojot komandu kill/from/usr/bin, varat iegūt papildu funkciju, lai nogalinātu procesu pēc procesa nosaukuma, izmantojot pkill.

Komandas kill sintakse ir šāda:

# kill [signal or option] PID(s)

Kill komandai signāla nosaukums varētu būt:

Signal Name		Signal Value			Behaviour

SIGHUP			      1				Hangup
SIGKILL			      9				Kill Signal
SIGTERM			      15			Terminate

Skaidrs, ka uzvedība virs SIGTERM ir noklusējuma un drošākais veids, kā nogalināt procesu. SIGHUP ir mazāk drošs veids kā nogalināt procesu kā SIGTERM. SIGKILL ir visdrošākais veids starp trim iepriekš minētajiem, lai nogalinātu procesu, kas izbeidz procesu, nesaglabājot.

Lai nogalinātu procesu, mums jāzina procesa ID. Process ir programmas eksemplārs. Katru reizi, kad programma tiek startēta, šim procesam automātiski tiek ģenerēts unikāls PID.

Katram Linux procesam ir pid. Pirmais process, kas sākas, palaižot Linux sistēmu, ir - init process, līdz ar to tam lielākajā daļā gadījumu tiek piešķirta vērtība “1”.

Init ir galvenais process, un to nevar nogalināt šādā veidā, kas nodrošina, ka galvenais process netiek nogalināts nejauši. Init nolemj un ļauj sevi nogalināt, kur nogalināšana ir tikai lūgums izslēgt.

Lai zinātu visus procesus un attiecīgi tiem piešķirto pid, palaidiet šādu komandu 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

Kā būtu ar iepriekšminētās izejas pielāgošanu, izmantojot sintaksi kā “pidof process”.

# pidof mysqld
1684

Vēl viens veids, kā sasniegt iepriekš minēto mērķi, ir sekot zemāk esošajai sintaksei.

# 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

Pirms mēs ejam uz priekšu un izpildām kill komandu, jāatzīmē daži svarīgi punkti:

  1. Lietotājs var nogalināt visu savu procesu.
  2. Lietotājs nevar nogalināt cita lietotāja procesu.
  3. Lietotājs nevar nogalināt sistēmas izmantotos procesus.
  4. Saknes lietotājs var nogalināt sistēmas līmeņa procesu un jebkura lietotāja procesu.

Vēl viens veids, kā veikt to pašu funkciju, ir izpildīt komandu ‘pgrep’.

# pgrep mysql
3139

Lai nogalinātu iepriekš minēto PID, izmantojiet komandu kill, kā parādīts.

kill -9 3139

Iepriekš minētā komanda nogalinās procesu ar pid = 3139, kur PID ir procesa skaitliskā vērtība.

Vēl vienu veidu, kā veikt to pašu funkciju, var pārrakstīt kā.

# kill -SIGTERM 3139

Līdzīgi ‘kill -9 PID’ ir līdzīgs ‘kill -SIGKILL PID’ un otrādi.

Jums ir jāzina procesa nosaukums, pirms nogalināšana un nepareiza procesa nosaukuma ievadīšana var jūs aizskart.

# pkill mysqld

Nogalini vairāk nekā vienu procesu vienlaikus.

# kill PID1 PID2 PID3

or

# kill -9 PID1 PID2 PID3

or

# kill -SIGKILL PID1 PID2 PID3

Ko darīt, ja procesam ir pārāk daudz gadījumu un daudz bērnu procesu, mums ir komanda ‘killall’. Šī ir vienīgā šīs saimes komanda, kas procesa numura vietā kā argumentu ņem procesa nosaukumu.

# killall [signal or option] Process Name

Lai nogalinātu visus mysql gadījumus kopā ar bērnu procesiem, izmantojiet komandu šādi.

# killall mysqld

Jūs vienmēr varat pārbaudīt procesa statusu, ja tas darbojas vai nedarbojas, izmantojot jebkuru no tālāk norādītajām komandām.

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

Pagaidām tas ir viss, no manas puses. Drīz būšu šeit atkal ar citu interesantu un informatīvu tēmu. Līdz tam, sekojiet līdzi, sazinieties ar Tecmint un vesels. Neaizmirstiet komentāru sadaļā sniegt vērtīgas atsauksmes.