J'ai deux instances d'un processus en cours d'exécution. L'un d'entre eux est "FREAKING OUT!" et des erreurs d'impression non stop à STDOUT.
Je veux tuer le processus interrompu mais je dois m'assurer de ne pas terminer le mauvais. Ils ont tous deux été lancés en même temps et en utilisant, top
je peux voir qu'ils utilisent tous les deux la même quantité de mémoire et de CPU. Je n'arrive pas à trouver quoi que ce soit qui indique quel processus se comporte mal.
La chose la plus sûre serait de déterminer quel processus / pid écrit dans STDOUT.
Y'a-t'il un quelconque moyen d'y arriver?
/dev/null
). Êtes-vous sûr de ne pas vouloir dire un fichier particulier à la place (comme un périphérique terminal ou un fichier journal ...)?Réponses:
Sous Linux, en supposant que vous vouliez savoir ce qui écrit dans la même ressource que la sortie standard de votre shell, vous pouvez faire:
Cela signale les
write()
appels système (sur n'importe quel descripteur de fichier) de chaque processus qui a au moins un descripteur de fichier ouvert sur le même fichier que fd 1 de votre shell.la source
Vous pouvez arrêter les deux traitements en leur envoyant SIGSTOP (remplacez pid1 et pid2 par les PID réels ou utilisez
killall
et le nom de l'application):L'impression sur le terminal (ou là où la sortie standard est redirigée) doit s'arrêter. Continuez ensuite l'un d'eux en utilisant
Si les messages d'erreur apparaissent immédiatement, vous savez que c'est le premier processus. Sinon, vous pouvez l'arrêter à nouveau et continuer la seconde ...
Avant de tuer un processus arrêté, il est recommandé d'envoyer d'abord SIGCONT.
La même technique peut être utilisée avec
Ctrl-Z
et les commandes d'emploi du shell (fg %1
,bg %1
,kill %1
, ...).la source