Vraag Hoe de proces-ID (PID) van een lopend terminalprogramma te vinden?


Ik run een programma in de terminal waar ik niet aan kan ontsnappen Ctrl-C en dat ik wil doden. Hoe kan ik zijn PID vinden?


90
2017-08-25 15:00


oorsprong


Dit is een tak van Wat moet ik doen als Ubuntu vastloopt? als een verwijzing om te voorkomen dat details in die kwestie te technisch worden. - Jjed
Er is een pidof opdracht. - neverMind9


antwoorden:


Open een andere terminal en voer uit ps ax | grep foo waar foo de naam is van het niet-reagerende programma. Dit zou een regel output moeten teruggeven die er ongeveer zo uitziet:

$ ps ax | grep firefox
2222 ?        S      0:00 /bin/sh /usr/lib/firefox-3.6.9/firefox
2231 ?        Sl   514:36 /usr/lib/firefox-3.6.9/firefox-bin
30290 pts/2    S+     0:00 grep --color=auto firefox

Het eerste veld van elke regel van uitvoer is een getal dat overeenkomt met de proces-ID van het programma dat overeenkomt met grep (je kunt veilig de laatste negeren die staat voor grep zelf.

Om het overtredende proces te stoppen, doe je: kill pid waarbij pid de proces-ID van het programma is. Mogelijk moet u uw oordeel gebruiken over welke van de wedstrijden moet zijn killed, of je zou kunnen gebruiken top in plaats daarvan. Gebruik makend van kill alleen stuurt SIGTERM, wat u eerst moet proberen, omdat het programma het programma na zichzelf op de juiste manier opruimt. Als SIGTERM faalt, probeer dan SIGHUP, wat een sterker geneesmiddel is: kill -HUP pid. Als al het andere niet lukt, stuur dan SIGKILL. Maar je zou dit alleen als laatste redmiddel moeten doen, omdat SIGKILL ervoor zorgt dat de kernel het proces onmiddellijk beëindigt zonder mogelijkheid tot opruimen. Dit kan soms resulteren in datacorruptie of andere problemen. Nogmaals, stuur SIGKILL alleen als laatste redmiddel. Om dit te doen, doe kill -KILL pid of kill -9 pid.

Als je een grafische interface draait, hoef je je natuurlijk niet voor de gek te houden met deze gekke opdrachtregel om de klus te klaren. Open gewoon "Systeemmonitor", ga naar het tabblad Processen, kies het proces dat u wilt stoppen (Hm, zou het kunnen zijn met 90% CPU?) En klik er met de rechtermuisknop op. Omdat het proces al is gestopt, (dat is het probleem, toch?) Kies End Process of Kill Process in het menu dat verschijnt.

Met dank aan koanhead


107
2018-06-16 09:07



Mensen mogen SIGKILL (kill -9) nooit gebruiken tenzij alle andere methoden zijn mislukt. Alleen aanbieding kill -9 is slecht advies. Ik heb het antwoord bewerkt om het te corrigeren. - Scott Severance
Hoe kan ik de pid van een aangepaste functie vinden. Ik heb een functie die een lus bevat met een ping commando en sleep. Volgens unix.stackexchange.com/a/275826/72988 , het is niet mogelijk in Ubuntu zonder multiplexer. - Timo


Ik denk niet dat er zulke lange commando's nodig zijn als je dezelfde opdrachten met pgrep, pkill, pidof etc ... kunt uitvoeren

  • Om de pid van een Running-programma te krijgen

pgrep:

   pgrep [options] pattern

BESCHRIJVING :     pgrep kijkt door de lopende processen en geeft de proces-ID's weer die overeenkomen met de selectiecriteria voor stdout. Alle criteria moeten overeenkomen. Bijvoorbeeld,

  • Om het proces met de naam sshd te vinden dat eigendom is van root.

    $ pgrep -u root sshd
    
  • Maak een lijst van de processen die eigendom zijn van root OR daemon.

    $ pgrep -u root,daemon
    

pidof:

BESCHRIJVING:

Pidof vindt de proces-id's (pids) van de genoemde programma's. Het drukt die id's af op de standaarduitvoer.

syntaxis:        pidof programmanaam

  • Gebruik pkill om een ​​programma door pid te doden voorbeeld:

    pkill pid    
    pkill -f process_name    
    pkill -o process_name    
    pkill -n process_name    
    pkill -l process_name
    

    -f vlag: doorzoekt de procesnaam (zie man pkill)
    -o vlag: Selecteer alleen de oudste van de afstemmingsprocessen.
    -n vlag: selecteer alleen de nieuwste aanpassingsprocessen.
    -l vlag: vermeld de procesnaam en de proces-ID.


35
2018-06-16 09:28



Dit is het beste antwoord - BlackDivine


De eenvoudigste manier om de pid van een lopend programma te kennen, is het gebruik van:

pidof <application name>

Als u bijvoorbeeld vim hebt gestart en de pid ervan wilt weten:

pidof vim

Vergeet niet dat u de exacte naam van het programma moet opgeven die is gestart.

Bijvoorbeeld, als u vi uitvoert en uitvoert pidof vim je krijgt geen correcte resultaten.

Verwijzen naar pidof's handleidingpagina voor meer info.


16
2017-12-24 16:45



Dit wordt standaard niet geïnstalleerd. Het kan in het sysvinit-utils-pakket zitten. - flickerfly
Ik heb MariaDB. pidof mysqld geeft een PID terug. Echter, als ik typ pidof Mariadb er wordt niets teruggebracht. Is het dezelfde PID voor zowel MariaDB als MySQL? - Pathros


Ik heb gemerkt dat het prettig is om een ​​niet-hoofdlettergevoelige zoekopdracht te gebruiken door de "-i" toe te voegen en "aux" in plaats van "ax" te gebruiken om een ​​meer beschrijvende uitvoer te krijgen:

ps aux | grep -i firefox

Als je alle processen die je zou kunnen gebruiken zou willen doden:

ps aux | grep -i firefox | awk {'print $2'} | xargs kill -9

Dat is een krachtige moord. Laat de "-9" vallen als je een zachte kill wilt.


13
2018-01-10 13:29



Dit doodt ook de ps aux | grep -i firefox... proces, want dat bevat de tekst firefox in zijn bevel! - Eric
@Eric dat u zou kunnen gebruiken grep -i firefo[x] om alleen firefox aan te passen - A.D.
@ John-foley adviseert nooit om te gebruiken -9 met kill, zien hier voor uitleg - A.D.


Als u alleen de pid wilt (handig voor autokill-scripts, enz ...)

pgrep -f desired_program_name

3
2018-06-16 11:01





U kunt ook een andere terminal openen (of overschakelen naar een andere tty) en uitvoeren top, dat is in feite een tekstversie van de systeemmonitor. De eerste kolom bevat de PID van elk lopend proces, dat u kunt doden door op te drukken K, het invoeren van de PID en vervolgens het invoeren van een numeriek signaal om te verzenden.


0
2017-09-27 21:09





Je zou kunnen doen:

ps ax | grep firefox | cut -f2 -d" " - | xargs kill -9

de eerste twee pijpen krijgen procesinformatie, daarna proberen we de PID-kolom te krijgen door de old-school snede te gebruiken en dan geven we de resulterende PID om te doden.


0
2017-09-10 14:30



kill -9 is het grootste wapen dat je hebt om een ​​proces te doden. Probeer in eerste instantie een vriendelijker signaal voordat je naar SIGKILL gaat om het proces een kans te geven om zijn bronnen op te schonen. - Byte Commander
Dat klopt @ByteCommander. Ik wilde er een een voering van maken die de klus zal klaren. - Arian Soltani


Voor degenen met Ubuntu 16.04 LTS, u moet gebruik ps ax en niet alleen ps op de opdrachtregel, anders krijg je alleen de processen die voortkomen uit de specifieke terminalinstantie waar je je bevindt (meestal alleen 'bash' [de shell waarin je bent] en 'ps' [wat je net hebt uitgevoerd])


0