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
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
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:
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 :)
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
jobs -l devrait vous donner le pid de la liste des processus Nohup. tuez-les doucement. ;)
Tu pourrais essayer
kill -9 `pgrep [command name]`
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é.
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
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}
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
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:
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.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.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.