En guide til at dræbe, Pkill og Killall-kommandoer til at afslutte en proces i Linux


Linux-operativsystemet leveres med kill-kommando for at afslutte en proces. Kommandoen gør det muligt at fortsætte med at køre serveren uden behov for at genstarte efter en større ændring/opdatering. Her kommer Linuxs store magt, og det er en af grundene til, at Linux kører på 90% af serverne på planeten.

Kill-kommando send et signal, et specificeret signal for at være mere perfekt til en proces. Drab-kommandoen kan udføres på en række måder direkte eller fra et shell-script.

Brug af kill-kommando fra/usr/bin giver dig nogle ekstra funktioner til at dræbe en proces efter procesnavn ved hjælp af pkill.

Den almindelige syntaks for kill-kommando er:

# kill [signal or option] PID(s)

For en kill-kommando kan et signalnavn være:

Signal Name		Signal Value			Behaviour

SIGHUP			      1				Hangup
SIGKILL			      9				Kill Signal
SIGTERM			      15			Terminate

Det er klart, at SIGTERM fra standarderne er den standard og sikreste måde at dræbe en proces på. SIGHUP er mindre sikker måde at dræbe en proces på som SIGTERM. SIGKILL er den mest usikre måde blandt de ovennævnte tre at dræbe en proces, der afslutter en proces uden at gemme.

For at dræbe en proces er vi nødt til at kende proces-id'et for en proces. En proces er en forekomst af et program. Hver gang et program starter, genereres der automatisk en unik PID til denne proces.

Hver proces i Linux har et pid. Den første proces, der starter, når Linux-systemet startes, er - init-proces, og det tildeles derfor værdien '1' i de fleste tilfælde.

Init er masterprocessen og kan ikke dræbes på denne måde, hvilket sikrer, at masterprocessen ikke dræbes ved et uheld. Init beslutter og lader sig dræbe, hvor drab blot er en anmodning om nedlukning.

For at kende alle processerne og tilsvarende deres tildelte pid skal du køre følgende ps-kommando.

# 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

Hvad med at tilpasse ovenstående output ved hjælp af syntaks som 'pidof-proces'.

# pidof mysqld
1684

En anden måde at nå ovennævnte mål er at følge nedenstående syntaks.

# 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

Inden vi går videre og udfører en kill-kommando, skal nogle vigtige punkter bemærkes:

  1. En bruger kan dræbe al sin proces.
  2. En bruger kan ikke dræbe en anden brugers proces.
  3. En bruger kan ikke dræbe processer, som systemet bruger.
  4. En rodbruger kan dræbe proces på systemniveau og processen for enhver bruger.

En anden måde at udføre den samme funktion på er at udføre kommandoen 'pgrep'.

# pgrep mysql
3139

For at dræbe ovenstående proces-PID skal du bruge kill-kommandoen som vist.

kill -9 3139

Ovenstående kommando dræber processen med pid = 3139, hvor PID er en numerisk værdi af processen.

En anden måde at udføre den samme funktion på kan omskrives som.

# kill -SIGTERM 3139

Tilsvarende er 'kill -9 PID' magen til 'kill -SIGKILL PID' og omvendt.

Du skal være opmærksom på procesnavnet, før du dræber og indtaster et forkert procesnavn kan skrue dig.

# pkill mysqld

Dræb mere end én proces ad gangen.

# kill PID1 PID2 PID3

or

# kill -9 PID1 PID2 PID3

or

# kill -SIGKILL PID1 PID2 PID3

Hvad hvis en proces har for mange forekomster og et antal underordnede processer, har vi kommandoen 'killall'. Dette er den eneste kommando i denne familie, der tager procesnavn som argument i stedet for procesnummer.

# killall [signal or option] Process Name

For at dræbe alle mysql-forekomster sammen med underordnede processer skal du bruge kommandoen som følger.

# killall mysqld

Du kan altid kontrollere status for processen, hvis den kører eller ikke ved hjælp af en af nedenstående kommando.

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

Det er alt for nu, fra min side. Jeg vil snart være her igen med et andet interessant og informativt emne. Indtil da skal du holde øje med forbindelsen til Tecmint og sund. Glem ikke at give din værdifulde feedback i kommentarsektionen.