Je voudrais utiliser killall sur un processus du même nom à partir duquel killall sera exécuté sans tuer le processus engendrant le killall. Donc, plus en détail, disons que j'ai process foo, et le processus foo est en cours d'exécution. Je veux être capable de lancer "foo -k", et que le nouveau foo tue le vieux foo, sans se tuer.killall sur le processus du même nom
Répondre
pgrep foo | grep -v $$ | xargs kill
Si vous n'avez pas pgrep
, vous devrez trouver une autre façon de générer la liste des PIDs d'intérêt. Certaines options sont:
Utilisez ps avec des options appropriées, suivi d'une combinaison de grep, sed et/ou awk pour correspondre aux processus et extraire le PIDs.
killall
peut envoyer un signal 0 au lieu deSIGTERM
; la sémantique standard de ceci est qu'elle n'envoie pas de signal, mais détermine simplement si le processus est vivant ou non. Vous pouvez peut-être utiliser killall pour sélectionner la liste de processus et l'imprimer pour imprimer les PID des correspondants qui sont vivants. Cela nécessiterait probablement un peu de post-traitement avec sed.Le système de fichiers
/proc
de Linux contient peut-être des pseudo-fichiers contenant des données système que vous pouvez parcourir. Encore une fois, grep/awk/sed sont vos amis ici.
Si vous avez vraiment besoin de détails particuliers sur la façon de procéder, commentez ou envoyez-moi un courrier, et j'essaierai de développer certaines de ces options plus en détail.
[Edits:. Ajouté d'autres options pour ceux sans pgrep]
Cela semble fonctionner sur OS X:
killall -s foo | perl -ne 'system $_ unless /\b'$PPID'\b/'
listes killall -s ce qu'il ferait, un PID à la fois. Fais ce qu'il ferait sauf te tuer.
Notez que -s se comporte différemment sous Linux, alors faites attention si vous le portez dans le futur. – bdonlan
La manière habituelle de résoudre ce problème est d'avoir foo
écrire son numéro d'identification de processus dans un fichier, dire quelque chose comme /var/run/foo.pid
quand il est exécuté en mode démon . Ensuite, vous pouvez demander à la version non démon de lire le PID à partir du fichier PID et d'appeler directement le kill(2)
. C'est habituellement comment Apache et le genre le manipulent. Bien sûr, les nouveaux démons OSX passent par launchd(8)
à la place, mais il y en a encore quelques-uns qui utilisent de bons vieux signaux.
- 1. Le killall du terminal Mac OS X ne tue pas le processus en cours
- 2. Modifier le nom du processus en C#?
- 3. Win32API - Comment obtenir le nom de fichier du processus à partir du handle de processus?
- 4. C++: Obtenir le nom du processus exécutant mon application
- 5. Appel DataBindings.Clear() sur plusieurs, le même nom contrôles
- 6. Créer une propriété python avec le même nom que le nom du membre de la classe
- 7. Est-ce que plusieurs versions d'une même DLL (Boost) peuvent coexister dans le même processus?
- 8. C++ wrapper avec le même nom?
- 9. Vim 7.2 se bloque au démarrage, "killall vim" le corrige
- 10. Détection de gouttes à partir du même processus
- 11. Erreur TortoiseSvn: le même nom que le répertoire administratif
- 12. Spécifier plusieurs paramètres du même nom en utilisant HTTPService
- 13. SVN: un répertoire versionné du même nom existe déjà
- 14. fichier et de répertoire avec le même nom dans le même répertoire parent - Solaris 8, UFS
- 15. Comment interroger un modèle basé sur le nom du contrôleur
- 16. Comment lier les fichiers .c et .h du même nom?
- 17. CrossDomainError sur le même domaine
- 18. Quelle est l'indépendance des threads dans le même processus?
- 19. Pourquoi un processus SQLCLR s'exécuterait-il plus lentement que le même côté du client de code
- 20. Comment puis-je déterminer le nom du processus ciblé en cours et la version en C#
- 21. Comment puis-je déterminer le nom du processus actuellement focalisé en C#
- 22. nom du chemin et arguments des processus en cours d'exécution en utilisant le code java
- 23. Vues MVC avec le même nom Problème/Bogue
- 24. MDI: nom du fichier sur l'onglet
- 25. En C++, quand deux variables du même nom peuvent-elles être visibles dans la même portée?
- 26. Lire le contenu du fichier et trouver le nom de fichier complet sur le disque
- 27. Le sous-processus de Python.Popen renvoie la même sortie stdout même si elle ne devrait pas
- 28. C# Spoof propriétaire du processus
- 29. L'importation du module portant le même nom qu'un module intégré provoque une erreur d'importation
- 30. Plusieurs blocs de même nom dans Jinja2
Nice! J'aurais dû préciser cependant que cela doit pouvoir être fait dans le contexte de l'installation OS X par défaut, qui ne semble pas avoir de pgrep. – user53937
A-t-il un pidof? – bdonlan