emplois -l devrait vous donner le pid pour la liste des processus nohup.tuez-les (-9) doucement.;)
J'utilise red hat linux sur un serveur VPS (et via SSH - putty), pour moi ce qui suit a fonctionné :
Tout d'abord, vous listez tous les processus en cours d'exécution :
ps -ef
Ensuite, dans la première colonne, vous trouvez votre nom d'utilisateur ; Je l'ai trouvé les trois fois suivantes :
- 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 le PID par le PID du processus nohup bien sûr)
Et c'est tout !
J'espère que cette réponse sera utile pour quelqu'un que je suis aussi très nouveau pour bash et SSH, mais j'ai trouvé 95% des connaissances dont j'ai besoin ici :)
supposons que j'exécute 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
Lors de l'utilisation de nohup
et 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 plus tard pour tuer le processus si nécessaire, via kill PID
ou kill -9 PID
(si vous avez besoin de 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à. Notez que nohup
le mot clé/commande lui-même n'apparaît pas dans le ps
sortie 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
Cela exécutera my_command
enregistrer 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 de router 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 au lieu d'un simple fichier nommé 1
. Le 2>&1
est nécessaire pour capturer tous les messages d'erreur qui sont normalement écrits sur l'erreur standard dans notre my.log
fichier (qui provient de la sortie standard). Voir Redirection d'E/S pour plus de détails sur la gestion de la redirection d'E/S avec le shell.
Si la commande envoie une sortie régulièrement, vous pouvez vérifier la sortie de temps en temps avec 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