web-dev-qa-db-fra.com

Comment obtenir l'ID de processus pour tuer un processus Nohup?

J'exécute un processus Nohup sur le serveur. Lorsque j'essaie de le tuer, ma console PuTTY se ferme à la place.

voici comment j'essaie de trouver l'ID de processus:

ps -ef |grep Nohup 

c'est la commande de tuer

 kill -9 1787 787
181
user2535056

Lorsque vous utilisez Nohup et que vous mettez la tâche en arrière-plan, l'opérateur d'arrière-plan (&) vous donnera le PID à l'invite de commande. Si votre plan est de gérer manuellement le processus, vous pouvez enregistrer ce PID et l'utiliser ultérieurement pour tuer le processus si nécessaire, via kill PID ou kill -9 PID (si vous devez forcer la suppression). Vous pouvez également rechercher le PID ultérieurement par ps -ef | grep "command name" et localiser le PID à partir de cet emplacement. Notez que Nohup mot-clé/commande lui-même n'apparaît pas dans la sortie ps de la commande en question.

Si vous utilisiez un script, vous pourriez faire quelque chose comme:

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

Ceci exécutera my_command en enregistrant toutes les sorties dans my.log (dans un script, $! représente le PID du dernier processus exécuté). Le 2 est le descripteur de fichier pour l'erreur standard (stderr) et 2>&1 indique au Shell d'acheminer la sortie d'erreur standard vers la sortie standard (descripteur de fichier 1). Il nécessite &1 pour que le shell sache qu'il s'agit d'un descripteur de fichier dans ce contexte plutôt que d'un fichier nommé 1. Le 2>&1 est nécessaire pour capturer tous les messages d'erreur qui sont normalement écrits en erreur standard dans notre fichier my.log (qui provient de la sortie standard). Voir Redirection E/S pour plus de détails sur la gestion de la redirection E/S avec le shell.

Si la commande envoie régulièrement des résultats, vous pouvez vérifier occasionnellement le résultat avec tail my.log ou si vous souhaitez le suivre "en direct", vous pouvez utiliser tail -f my.log. Enfin, si vous avez besoin de tuer le processus, vous pouvez le faire via:

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

J'utilise Red Hat Linux sur un serveur VPS (et via SSH - PuTTY). Pour moi, les éléments suivants ont fonctionné:

Tout d’abord, vous listez tous les processus en cours:

ps -ef

Ensuite, dans la première colonne, vous trouvez votre nom d'utilisateur; Je l'ai trouvé les trois fois suivants:

  • L'un était la connexion SSH
  • La seconde était une connexion FTP
  • Le dernier était le processus Nohup

Ensuite, dans la deuxième colonne, vous pouvez trouver le PID du processus Nohup et vous tapez uniquement:

kill PID 

(en remplaçant bien sûr le PID par le PID du processus Nohup)

Et c'est ça!

J'espère que cette réponse sera utile pour quelqu'un que je suis aussi très nouveau dans le domaine des bashs et des SSH, mais que j'ai trouvé 95% des connaissances dont j'ai besoin ici :)

83
Phonebox

supposons que je lance le script Ruby en arrière-plan avec la commande ci-dessous

Nohup Ruby script.rb &

alors je peux obtenir le pid du processus d'arrière-plan ci-dessus en spécifiant le nom de la commande. Dans mon cas, la commande est Ruby.

ps -ef | grep Ruby

sortie

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

Maintenant, vous pouvez facilement tuer le processus en utilisant la commande kill

kill 25938
37
Sanjay Salunkhe

jobs -l devrait vous donner le pid de la liste des processus Nohup. tuez-les doucement. ;)

14
Puneet S. Chauhan

Tu pourrais essayer

kill -9 `pgrep [command name]`
5
Balliver

Cela fonctionne dans Ubuntu

Tapez ceci pour trouver la PID

ps aux | grep Java

Tous les processus en cours concernant Java seront affichés

Dans mon cas c'est

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

Maintenant tuez-le kill -9 3315

Le processus de zombie s'est finalement arrêté.

3
John Joe

J'ai démarré le serveur Django avec la commande suivante.

Nohup manage.py runserver <localhost:port>

Cela fonctionne sur CentOS:

:~ ns$netstat -ntlp
:~ ns$kill -9 PID 
1
Naseer-shaik

Supposons que vous exécutiez un programme Java avec Nohup, vous pouvez obtenir l'ID de processus Java en

`ps aux | grep Java`

sortie

xxxxx     9643  0.0  0.0  14232   968 pts/2   

alors vous pouvez tuer le processus en tapant

Sudo kill 9643

ou disons que vous devez tuer tous les processus Java, puis utilisez simplement

Sudo killall Java

cette commande tue tous les processeurs Java. vous pouvez l'utiliser avec processus. donnez simplement le nom du processus à la fin de la commande

Sudo killall {processName}
1
NuOne

lorsque vous créez un travail dans Nohup, il vous indiquera l'identifiant du processus!

Nohup sh test.sh &

la sortie vous montrera l'ID de processus comme

25013

vous pouvez le tuer alors:

kill 25013
0
broid

Aujourd'hui, j'ai rencontré le même problème. Et comme c'était il y a longtemps, j'ai totalement oublié quelle commande j'ai utilisée et quand. J'ai essayé trois méthodes:

  1. Utilisation de la STIME indiquée dans la commande ps -ef. Cela indique l'heure à laquelle vous démarrez votre processus, et il est très probable que vous avez commandé Nohup juste avant de fermer ssh (cela dépend de vous). Malheureusement, je ne pense pas que la dernière commande soit la commande que j'ai exécutée à l'aide de Nohup, donc cela ne fonctionne pas pour moi.
  2. Le deuxième est le PPID, également montré dans la commande ps -ef. Cela signifie ID de processus parent, l'ID du processus qui crée le processus. Le ppid est 1 dans Ubuntu pour le processus utilisant Nohup. Ensuite, vous pouvez utiliser ps --ppid "1" pour obtenir la liste et cochez TIME (le temps CPU total utilisé par votre processus) ou CMD pour trouver le PID du processus.
  3. Utilisez lsof -i:port si le processus occupe certains ports et vous obtiendrez la commande. Ensuite, comme pour la réponse ci-dessus, utilisez ps -ef | grep command et vous obtiendrez le PID.

Une fois que vous avez trouvé le PID du processus, vous pouvez alors utiliser kill pid pour mettre fin au processus.

0
Youth Wu