Hoe u het proces-ID krijgt om een ​​NOHUP-proces te doden?

Ik heb een NOHUP-proces op de server. Wanneer ik het probeer te doden, sluit mijn putty-console in plaats daarvan.

Dit is hoe ik probeer het proces-ID te vinden:

ps -ef |grep nohup 

Dit is de opdracht om

te doden

kill -9 1787 787

Antwoord 1, Autoriteit 100%

Bij gebruik van nohupen u de taak op de achtergrond plaatst, geeft de achtergrondoperator (&) u de PID op de opdrachtprompt. Als uw plan is om het proces handmatig te beheren, kunt u die PID opslaan en later gebruiken om het proces indien nodig te doden, via kill pidof kill -9 PID(indien je moet doden dwingen). Als alternatief kunt u de PID later vinden door ps -ef | grep "command name"en zoek de PID vanaf daar. Merk op dat nohuptrefwoord / opdracht zelf niet in de ps-uitvoer voor de betreffende opdracht verschijnt.

Als u een script gebruikt, zou u zoiets in het script kunnen doen:

nohup my_command > my.log 2>&1 &
echo $! > save_pid.txt

Hiermee wordt my_commanduitgevoerd, waarbij alle uitvoer wordt opgeslagen in my.log(in een script staat $!voor de PID van het laatst uitgevoerde proces ). De 2is de bestandsdescriptor voor standaardfout (stderr) en 2>&1vertelt de shell om standaardfoutuitvoer naar de standaard te routeren uitvoer (bestandsdescriptor 1). Het vereist &1zodat de shell weet dat het een bestandsdescriptor is in die context in plaats van alleen een bestand met de naam 1. De 2>&1is nodig om eventuele foutmeldingen die normaal gesproken als standaardfout worden geschreven vast te leggen in ons bestand my.log(dat uit standaarduitvoer komt). Zie I/O-omleidingvoor meer informatie over het afhandelen van I/O omleiding met de shell.

Als het commando regelmatig uitvoer verzendt, kunt u de uitvoer af en toe controleren met tail my.log, of als u het “live” wilt volgen, kunt u tail -f my.log. Ten slotte, als u het proces moet beëindigen, kunt u dit doen via:

kill -9 `cat save_pid.txt`
rm save_pid.txt

Antwoord 2, autoriteit 25%

Ik gebruik red hat linux op een VPS-server (en via SSH – putty), voor mij werkte het volgende:

Eerst vermeldt u alle lopende processen:

ps -ef

Vervolgens vind je in de eerste kolom je gebruikersnaam; Ik heb het de volgende drie keer gevonden:

  • Een daarvan was de SSH-verbinding
  • De tweede was een FTP-verbinding
  • De laatste was het nohup-proces

Vervolgens kun je in de tweede kolom de PID van het nohup-proces vinden en typ je alleen:

kill PID 

(natuurlijk de PID vervangen door de PID van het nohup-proces)

En dat is het!

Ik hoop dat dit antwoord nuttig zal zijn voor iemand die ook nog niet bekend is met bash en SSH, maar 95% van de kennis die ik nodig heb hier heb gevonden 🙂


Antwoord 3, autoriteit 15%

stel dat ik ruby script op de achtergrond gebruik met onderstaand commando

nohup ruby script.rb &

dan kan ik de pid van het bovenstaande achtergrondproces krijgen door de opdrachtnaam op te geven. In mijn geval is het commando robijn.

ps -ef | grep ruby

uitvoer

ubuntu   25938 25742  0 05:16 pts/0    00:00:00 ruby test.rb

Je kunt het proces nu gemakkelijk beëindigen door het kill-commando te gebruiken

kill 25938

Antwoord 4, autoriteit 7%

jobs -lzou je de pid moeten geven voor de lijst met nohup-processen.
dood (-9) ze voorzichtig.
😉


Antwoord 5, autoriteit 2%

Je zou het kunnen proberen

kill -9 `pgrep [command name]`

Antwoord 6, autoriteit 2%

Stel dat je een java-programma uitvoert met nohup, dan kun je de java-proces-ID krijgen door

`ps aux | grep java`

uitvoer

xxxxx     9643  0.0  0.0  14232   968 pts/2   

dan kun je het proces beëindigen door te typen

sudo kill 9643

of laten we zeggen dat je alle Java-processen moet doden en dan gewoon

sudo killall java

dit commando doodt alle Java-processen. je kunt dit gebruiken met proces. geef gewoon de procesnaam aan het einde van de opdracht

sudo killall {processName}

Antwoord 7

Als uw toepassing altijd dezelfde poort gebruikt, kunt u alle processen in die poort op deze manier beëindigen.

kill -9 $(lsof -t -i:8080)


Antwoord 8

Dit werkt in Ubuntu

Typ dit om de PID

te weten te komen

ps aux | grep java

Alle lopende processen met betrekking tot Java worden getoond

In mijn geval is

johnjoe      3315  9.1  4.0 1465240 335728 ?      Sl   09:42   3:19 java -jar batch.jar

Dood het nu kill -9 3315

Het zombieproces is eindelijk gestopt.


Antwoord 9

wanneer je een job aanmaakt in nohup, zal het je de proces-ID vertellen!

nohup sh test.sh &

de uitvoer toont u de proces-ID zoals

25013

je kunt het dan doden:

kill 25013

Antwoord 10

Ik startte de django-server met het volgende commando.

nohup manage.py runserver <localhost:port>

Dit werkt op CentOS:

:~ ns$netstat -ntlp
:~ ns$kill -9 PID 

Antwoord 11

Als u niet op de hoogte bent van de PID, zoek deze dan eerst op met het TOP-commando

top -U gebruikers-ID

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

Je krijgt de PID met behulp van top en voer vervolgens de kill-bewerking uit.

$ kill -9 <PID>

Antwoord 12

Vandaag kwam ik hetzelfde probleem tegen. En aangezien het lang geleden is, ben ik helemaal vergeten welk commando ik gebruikte en wanneer. Ik heb drie methoden geprobeerd:

  1. De STIME gebruiken die wordt weergegeven in de opdracht ps -ef. Dit toont de tijd waarop u uw proces start, en het is zeer waarschijnlijk dat u geen opdracht geeft net voordat u ssh sluit (hangt van u af). Helaas denk ik niet dat de laatste opdracht de opdracht is die ik gebruik met nohup, dus dit werkt niet voor mij.
  2. De tweede is de PPID, ook weergegeven in de opdracht ps -ef. Het betekent Parent Process ID, de ID van het proces dat het proces aanmaakt. De ppid is 1 in ubuntu voor proces dat nohup gebruikt om uit te voeren. Vervolgens kunt u ps --ppid "1"gebruiken om de lijst te krijgen, en TIME (de totale CPU-tijd die uw proces gebruikt) of CMD controleren om de PID van het proces te vinden.
  3. Gebruik lsof -i:portals het proces enkele poorten in beslag neemt, en je krijgt de opdracht. Gebruik dan, net als bij het antwoord hierboven, ps -ef | grep commanden je krijgt de PID.

Zodra je de PID van het proces hebt gevonden, kun je kill pidgebruiken om het proces te beëindigen.


Antwoord 13

Dit werkt voor mi fine op mac

kill -9 `ps -ef | awk '/nohup/{ print \$2 }'`

Antwoord 14

Over het verliezen van je putty: vaak de ps ... | awk/grep/perl/...proces wordt ook gematcht! Dus de ouderwetse truc is als volgt

ps -ef | grep -i [n]ohup 

Op die manier komt de regex-zoekopdracht niet overeen met het regex-zoekproces!


Antwoord 15

als u zich op een externe server bevindt, controleert u het geheugengebruik met topen vindt u uw proces en zijn ID. Voer daarna gewoon kill [your process ID]uit.


Antwoord 16

Ik doe het vaak op deze manier. Probeer het op deze manier:

ps aux | grep script_Name

Hier kan script_Nameelk script/bestand zijn dat wordt uitgevoerd door nohup.
Met deze opdracht krijgt u een proces-ID. Gebruik dan deze opdracht hieronder omhet script dat op nohup draait te doden.

kill -9 1787 787

Hier zijn 1787 en 787 proces-ID’s zoals genoemd in de vraag als voorbeeld.
Dit zou moeten doen wat in de vraag bedoeld was.

Other episodes