
Werken met een Linux-proces betekent vaak dat u de proces-ID of PID kent. Het is een uniek nummer dat aan elk stuk software wordt gegeven. Hier zijn twee manieren om erachter te komen wat het is.
Wat is een Linux-proces-ID?
Hoe een Linux PID te krijgen met het pidof-commando
Hoe PID’s te vinden met het pgrep-commando in Linux
Wat is een Linux-proces-ID?
Intern houdt Linux het lopende proces bij door ze een uniek ID-nummer toe te wijzen, de proces-ID of PID genoemd. Elke actieve applicatie, hulpprogramma en daemon heeft een PID.
PID’s zijn eenvoudige gehele getallen. Een nieuw gestart proces krijgt een PID die één hoger is dan de laatste PID die is uitgegeven. Het proces met de hoogste PID is dus het nieuwste, dat wil zeggen het meest recent gelanceerde proces. Dat gaat door totdat het systeem de maximale waarde voor een PID bereikt.
De bovengrens voor een PID is 32768. Zodra dat cijfer is bereikt, gaat Linux terug naar het begin en zoekt naar een PID die vrij is gekomen omdat het proces dat er eerder eigenaar van was, is beëindigd.
Het proces met een PID van 1 is het eerste proces dat wordt gestart wanneer Linux wordt gestart door de opstartprocessen. Op systemd-gebaseerde systemen zal dat zijn systemd . Op andere systemen is dat waarschijnlijk het geval inithoewel sommige Linux-distributies alternatieven gebruiken zoals OpenRc of s6.
Soms is het handig om de PID van een proces te ontdekken, meestal omdat u een actie op dat proces wilt uitvoeren. Hier zijn twee verschillende methoden om de PID van een proces te vinden als u de naam van het proces.
Hoe een Linux PID te krijgen met het pidof-commando
De pidof opdracht kan worden gezien als de combinatie van “PID” en “van”. Het is alsof je vraagt ​​wat de PID van dit proces is? Als we het commando zonder parameters gebruiken, doet het niets. Het brengt u stilletjes terug naar de opdrachtprompt. We moeten een procesnaam specificeren.
pidof bash

pidof vertelt ons dat de PID van de Bash-shell 8304 is. We kunnen dat verifiëren met de ps opdracht. Het enige wat we hoeven te doen is bellen ps zonder parameters. Het rapporteert over de processen die in de huidige sessie worden uitgevoerd.
ps

Omdat ps rapporteert over alle processen die het kan vinden, inclusief zichzelf, het vertelt ons dat er een bash proces en een ps proces loopt. Zoals we zouden verwachten, de bash proces heeft dezelfde PID dat pidof gerapporteerd over.
Als u meer dan één terminalvenster open hebt staan, pidof zal ze allemaal rapporteren.
pidof bash

Merk op dat de PID’s worden weergegeven van hoogste naar laagste of, met andere woorden, van meest recente naar de oudste.
Wat dit niet laat zien, is dat u mogelijk niet de eigenaar bent van al die processen. pidof vindt alle processen met overeenkomende namen, ongeacht wie de eigenaar is. Laten we dieper kijken door de uitvoer door te sluizen naar grep. We gebruiken de -e (selecteer alle processen) en de -f (volledige lijst) opties met ps .
ps -ef | grep bash

Twee van de bash-processen zijn van gebruiker dave, de derde is van gebruiker mary.
Soms genereert één applicatie een groot aantal processen, die elk hun eigen PID ontvangen. Dit is wat we krijgen met Google Chrome.
pidof chrome

Standaard, pidof rapporteert over alle processen. Als we willen, kunnen we alleen de meest recente van die processen opvragen. De -s (enkele opname) optie doet precies dat.
pidof -s chrome

Om de kill opdracht om handmatig alle chrome processen zouden omslachtig zijn. Als we de lijst met processen vastleggen in een variabele, kunnen we die variabele doorgeven aan de kill opdracht. De kill commando kan meerdere PID’s op zijn commando accepteren, dus het accepteert graag onze invoer en doodt alle processen voor ons.
pid=$(pidof chrome)
echo $pid
kill $pid
pidof chrome

De eerste opdracht verzamelt de uitvoer van pidof en wijst het toe aan onze variabele, die we een naam geven pid. Dat is niet nodig echo het naar het scherm, we doen dat gewoon om te laten zien wat onze variabele inhoudt.
We geven de variabele door aan de kill opdracht, gebruik dan pidof nogmaals om te controleren of er nog Chrome-processen overblijven. Ze zijn allemaal vermoord.
Een eigenaardigheid van pidof is dat het de PID van een shell-script niet zal retourneren. Het retourneert de PID van de bash shell die het script uitvoert. Om de shell te zien die een script uitvoert, moeten we de -x (script) optie.
pidof -x sleep-loop.sh
ps -e | grep bash

pidof geeft de PID van een bash-shell terug, en ps laat ons zien dat er twee shells draaien. Een daarvan is de shell die de pidof commando, en de andere is de shell die het script uitvoert.
Hoe PID’s te vinden met het pgrep-commando in Linux
De pgrep opdracht werkt een beetje zoals pidof bij het verkrijgen van proces-ID’s in Linux. Het vindt echter niet alleen processen die exact overeenkomen met de zoekopdracht, het retourneert ook de PID’s van alle processen waarvan de naam bevat de zoektekst.
Hier is een voorbeeld op een computer waarop Firefox draait.
pgrep firefox
pgrep fire
pgrep fox
pgrep refo

Al deze opdrachten vinden het Firefox-proces en retourneren de PID. Maar als je het commando had ingevoerd:
pgrep refo
Hoe zou je op zichzelf weten of pgrep Fi had gevondenrefox en niet, laten we zeggen, een dameon genaamd popnieuwmd?
Als je de -l (lijstnaam) optie, zal pgrep de procesnaam naast de PID vermelden.
pgrep refo -l

Als er meerdere instanties van een matchingproces zijn, worden ze allemaal vermeld.
pgrep bash

Merk op dat ze in oplopende volgorde worden weergegeven, wat de tegenovergestelde volgorde is van de uitvoer van pidof. Ze worden weergegeven van het oudste proces tot het nieuwste proces. Zoals we zagen met pidofzijn niet alle vermelde processen noodzakelijkerwijs van u.
De -u Met de optie (user id) kunt u zoeken naar processen die overeenkomen met de zoektekst en eigendom zijn van de benoemde gebruiker.
pgrep bash -u dave

Deze keer zien we drie bash-processen in de resultaten. De andere wordt gebruikt door mary.
pgrep bash -u mary

We kunnen gebruikersnamen aan elkaar rijgen als een door komma’s gescheiden lijst.
pgrep bash -u dave,mary -l

En we kunnen vragen om alle processen voor een specifieke gebruiker te zien.
pgrep -u dave -l

Om de volledige opdrachtregel te zien, gebruikt u de -a (volledige lijst) optie.
pgrep -u dave -a

Een woord over PID-eigendom
Niet alle systeemprocessen zijn eigendom van de rootgebruiker. Velen natuurlijk, maar niet allemaal. Dit commando werkt bijvoorbeeld:
pgrep avahi-daemon
Maar deze opdracht mislukt.
pgrep -u root avahi-daemon
Het mislukt omdat root is niet de eigenaar van dat proces. De feitelijke eigenaar is een systeemgebruiker genaamd “avahi”. Met de juiste gebruikersnaam werkt de opdracht.
pgrep -u avahi avahi-daemon
Het is een kleine moeite om op te letten.
| Linux-opdrachten | ||
| Bestanden |
teer · pv · kat · tac · chmod · grep · verschil · sed · ar · Mens · duwd · popd · fsck · testschijf · volg · fd · pandoc · CD · $PAD · awk · meedoen · jq · vouw · uniek · dagboekctl · staart · stat · ls · fstab · echo · minder · chgrp · chown · rev · Look · snaren · type · hernoemen · ritssluiting · uitpakken · monteren · umount · installeren · fschijf · mkf’s · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · In · lapje · overzetten · klonen · versnipperen · srm · scp · gzip · chattr · snee · vind · umasker · wc |
|
| Processen |
alias · scherm · bovenkant · Leuk · renice · voortgang · strace · systeemd · tmux · chsh · geschiedenis · Bij · partij · vrij · die · dmesg · chfn · gebruikersmod · ps · chroot · xargs · tty · pink · lsof · vmstat · time-out · muur · ja · doden · slaap · sudo · zo · tijd · groepstoevoeging · gebruikersmod · groepen · lshw · afsluiten · opnieuw opstarten · stoppen · uitschakelen · wachtwoord · lscpu · crontab · datum · bg · bijv · pidof · nee · pmap |
|
| Netwerken |
netstat · ping · traceroute · ik p · ss · wie is · mislukt2ban · bmon · graven · vinger · nmap · ftp · Krul · wkrijg · wie · wie ben ik · w · iptables · ssh-keygen · ufw · arpen · firewalld |