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 nohup
en 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 pid
of 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 nohup
trefwoord / 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_command
uitgevoerd, waarbij alle uitvoer wordt opgeslagen in my.log
(in een script staat $!
voor de PID van het laatst uitgevoerde proces ). De 2
is de bestandsdescriptor voor standaardfout (stderr
) en 2>&1
vertelt de shell om standaardfoutuitvoer naar de standaard te routeren uitvoer (bestandsdescriptor 1
). Het vereist &1
zodat de shell weet dat het een bestandsdescriptor is in die context in plaats van alleen een bestand met de naam 1
. De 2>&1
is 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:
- 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. - 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 ups --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. - Gebruik
lsof -i:port
als het proces enkele poorten in beslag neemt, en je krijgt de opdracht. Gebruik dan, net als bij het antwoord hierboven,ps -ef | grep command
en je krijgt de PID.
Zodra je de PID van het proces hebt gevonden, kun je kill pid
gebruiken 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 top
en 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.