Hoe de PID van een Linux-proces te vinden met pidof of pgrep

Hoe de PID van een Linux-proces te vinden met pidof of pgrep
fatmawati achmad zaenuri/Shutterstock.com
Om de proces-ID van een Linux-proces te vinden, gebruikt u het pidof-commando, zoals dit: “pidof voorbeeldnaam”. Als u slechts een deel van de PID-naam kent, kunt u in plaats daarvan “pgrep voorbeeldnaamfragment” gebruiken. Vervang “voorbeeldnaam” en “voorbeeldnaamfragment” door de termen waarop u wilt zoeken.

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.

Inhoudsopgave

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

De PID van een bash-shell vinden met de opdracht pidof

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

processen weergeven met het ps-commando

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

pidof rapporteert over verschillende instanties van afstemmingsprocessen

Merk op dat de PID’s worden weergegeven van hoogste naar laagste of, met andere woorden, van meest recente naar de oudste.

Hoe de ps-opdracht te gebruiken om Linux-processen te bewaken

VERWANTHoe de ps-opdracht te gebruiken om Linux-processen te bewaken

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

Ps en grep gebruiken om de eigenaren van bash-processen te identificeren

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

pidof het vinden van veel PID's voor een enkele applicatie met veel processen

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

De meest recente PID vinden van n applicatie met meerdere PID's

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

Een variabele met veel PID's doorgeven aan het kill-commando

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

De PID vinden van een bash-shell die een shell-script uitvoert

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

De PID van Firefox vinden met behulp van verschillende zoekaanwijzingen

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

De optie -l gebruiken om pgrep de procesnaam te laten weergeven

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

pgrep bash

Meerdere PID's weergeven met pgrep

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

Een lijst maken van de bash-processen van gebruiker Dave's PID's

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

pgrep bash -u mary

Een lijst maken van de bash-processen van gebruiker Mary's PID's

We kunnen gebruikersnamen aan elkaar rijgen als een door komma’s gescheiden lijst.

pgrep bash -u dave,mary -l

Een lijst van twee bash-processen PID's van gebruikers

En we kunnen vragen om alle processen voor een specifieke gebruiker te zien.

pgrep -u dave -l

Alle PID's weergeven die eigendom zijn van een specifieke gebruiker

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

pgrep -u dave -a

Gebruik de optie -a om de volledige opdrachtregel van elk proces weer te geven

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.

Nieuwste artikelen

Gerelateerde artikelen