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:
- En bruger kan dræbe al sin proces.
- En bruger kan ikke dræbe en anden brugers proces.
- En bruger kan ikke dræbe processer, som systemet bruger.
- 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.