GNU/Linux >> Tutoriels Linux >  >> Linux

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

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

Linux
  1. Comment trouver l'ID de processus dans Ubuntu ?

  2. Comment puis-je tuer un processus par nom au lieu de PID?

  3. Comment obtenir le PID d'un processus enfant forké dans un script shell

  4. Comment obtenir le PID par nom de processus ?

  5. Comment obtenir uniquement l'utilisateur, le pid et la commande exécutée pour un processus spécifique ? (Ubuntu 11.10)

Comment tuer un processus sous Linux

Comment trouver l'ID de processus d'un programme et le tuer [Astuce rapide]

Comment tuer un processus sous Linux

Comment tuer ou terminer un processus Linux :Le guide ultime

Comment trouver le PID et le PPID d'un processus sous Linux

Comment trouver le fichier .pid pour un processus donné