Priročnik za ukaze Kill, Pkill in Killall za zaključek procesa v Linuxu
Operacijski sistem Linux ima ukaz kill za zaključek procesa. Ukaz omogoča nadaljevanje zagona strežnika, ne da bi ga bilo treba po večji spremembi/posodobitvi ponovno zagnati. Tu prihaja velika moč Linuxa in to je eden od razlogov, zakaj Linux deluje na 90% strežnikov na planetu.
Ukaz Kill pošlje signal, določen signal, ki je bolj popoln za postopek. Ukaz kill se lahko izvede na več načinov, neposredno ali iz skripta lupine.
Uporaba ukaza kill iz/usr/bin vam nudi nekaj dodatnih funkcij za ubijanje procesa po imenu procesa s pomočjo pkill.
Pogosta sintaksa za ukaz kill je:
# kill [signal or option] PID(s)
Za ukaz kill je lahko ime signala:
Signal Name Signal Value Behaviour SIGHUP 1 Hangup SIGKILL 9 Kill Signal SIGTERM 15 Terminate
Iz vedenja zgoraj je SIGTERM očitno privzeti in najvarnejši način za uničenje procesa. SIGHUP je manj varen način ubijanja postopka kot SIGTERM. SIGKILL je najbolj nevaren način med zgornjimi tremi, da ubije postopek, ki zaključi postopek brez shranjevanja.
Da bi postopek ubili, moramo poznati ID procesa. Proces je primerek programa. Vsakič, ko se program zažene, se samodejno ustvari edinstveni PID za ta postopek.
Vsak proces v Linuxu ima pid. Prvi postopek, ki se začne ob zagonu sistema Linux, je postopek init, zato mu je v večini primerov dodeljena vrednost "1".
Init je glavni postopek in ga ni mogoče ubiti na ta način, kar zagotavlja, da se glavni postopek ne zgodi po naključju. Init se odloči in se pusti ubiti, pri čemer je ubijanje zgolj prošnja za zaustavitev.
Če želite poznati vse procese in jim dodeliti pid, zaženite naslednji ukaz 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
Kaj pa prilagodite zgornji izhod z uporabo sintakse kot "pidof proces".
# pidof mysqld
1684
Drug način za dosego zgornjega cilja je upoštevanje spodnje skladnje.
# 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
Preden stopimo naprej in izvršimo ukaz kill, je treba opozoriti na nekaj pomembnih točk:
- Uporabnik lahko ubije ves svoj postopek.
- Uporabnik ne more ubiti postopka drugega uporabnika.
- Uporabnik ne more ubiti procesov, ki jih uporablja sistem.
- Korenski uporabnik lahko ubije proces na ravni sistema in postopek katerega koli uporabnika.
Drug način za izvajanje iste funkcije je izvajanje ukaza 'pgrep'.
# pgrep mysql
3139
Če želite ubiti zgornji PID procesa, uporabite ukaz kill, kot je prikazano.
kill -9 3139
Zgornji ukaz bo ubil postopek s pid = 3139, kjer je PID številčna vrednost procesa.
Drug način za izvajanje iste funkcije je mogoče prepisati kot.
# kill -SIGTERM 3139
Podobno je "kill -9 PID" podoben "kill -SIGKILL PID" in obratno.
Zavedati se morate imena procesa, preden vas lahko ubije in vnese napačno ime procesa.
# pkill mysqld
Ubijte več kot en postopek hkrati.
# kill PID1 PID2 PID3 or # kill -9 PID1 PID2 PID3 or # kill -SIGKILL PID1 PID2 PID3
Kaj pa, če ima postopek preveč primerkov in številne podrejene procese, imamo ukaz 'killall'. To je edini ukaz te družine, ki kot argument namesto številke procesa vzame ime procesa.
# killall [signal or option] Process Name
Če želite ubiti vse primerke mysql in podrejene procese, uporabite ukaz, kot sledi.
# killall mysqld
Stanje procesa lahko vedno preverite s pomočjo katerega koli od spodnjih ukazov.
# service mysql status # pgrep mysql # ps -aux | grep mysql
To je za zdaj vse, z moje strani. Kmalu bom spet tukaj z drugo Zanimivo in informativno temo. Do takrat bodite z nami, povezani s Tecmintom in zdravi. Ne pozabite dati dragocenih povratnih informacij v oddelku za komentarje.