Je lance un processus nohup sur le serveur. Lorsque j'essaie de le tuer, la console putty se ferme à la place.
c'est ainsi que j'essaie de trouver l'identifiant du processus :
ps -ef |grep nohup
c'est la commande pour tuer
kill -9 1787 787
Je lance un processus nohup sur le serveur. Lorsque j'essaie de le tuer, la console putty se ferme à la place.
c'est ainsi que j'essaie de trouver l'identifiant du processus :
ps -ef |grep nohup
c'est la commande pour tuer
kill -9 1787 787
Lors de l'utilisation de 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 vous avez l'intention de gérer manuellement le processus, vous pouvez enregistrer ce PID et l'utiliser plus tard pour tuer le processus si nécessaire, via kill PID
o kill -9 PID
(si vous devez forcer la mise à mort). Alternativement, vous pouvez trouver le PID plus tard par ps -ef | grep "command name"
et localisez le PID à partir de là. Il convient de noter que nohup
Le mot-clé/commande lui-même n'apparaît pas dans la liste des mots-clés. ps
pour la commande en question.
Si vous utilisez un script, vous pouvez faire quelque chose comme ceci dans le script :
nohup my_command > my.log 2>&1 &
echo $! > save_pid.txt
Il s'agit d'exécuter my_command
enregistrer tous les résultats dans my.log
(dans un script, $!
représente le PID du dernier processus exécuté). Les 2
est le descripteur de fichier pour l'erreur standard ( stderr
) et 2>&1
indique à l'interpréteur de commandes d'acheminer la sortie d'erreur standard vers la sortie standard (descripteur de fichier 1
). Il faut &1
afin que le shell sache qu'il s'agit d'un descripteur de fichier dans ce contexte et non d'un simple fichier nommé 1
. Les 2>&1
est nécessaire pour capturer tous les messages d'erreur qui sont normalement écrits sur l'erreur standard dans notre my.log
(qui provient de la sortie standard). Voir Redirection E/S pour plus de détails sur la gestion de la redirection des E/S avec l'interpréteur de commandes.
Si la commande envoie régulièrement des données de sortie, vous pouvez les vérifier occasionnellement avec la commande tail my.log
ou, si vous voulez 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 ce qui suit a fonctionné :
Tout d'abord, vous dressez la liste de 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 suivantes :
Ensuite, dans la deuxième colonne, vous pouvez trouver le PID du processus nohup et vous n'avez qu'à taper :
kill PID
(en remplaçant le PID par le PID du processus nohup bien sûr)
Et c'est tout !
J'espère que cette réponse sera utile à quelqu'un. Je suis également très novice en matière de bash et de SSH, mais j'ai trouvé 95% des connaissances dont j'ai besoin ici :)
Supposons que je lance ruby script en arrière-plan avec la commande suivante
nohup ruby script.rb &
Je peux alors 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
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.