$ ps -e -T | grep myp | grep -v grep
797 797 ? 00:00:00 myp
797 798 ? 00:00:00 myp
797 799 ? 00:00:00 myp
797 800 ? 00:00:00 myp
Cela montre le processus myp
avec PID = 797 et quatre threads avec différents SPID.
Comment puis-je tuer un thread particulier du processus sans tuer tout le processus. Je comprends que cela pourrait ne pas être possible du tout dans certains cas lorsqu'il y a des dépendances fatales sur ce thread particulier. Mais est-ce possible dans tous les cas? Est-ce oui, comment?
J'ai essayé kill 799
et le processus lui-même a été interrompu. Maintenant, je ne suis pas sûr que ce soit parce qu'il y avait des dépendances qui ont myp
échoué sans le processus 800
ou parce que kill est tout simplement incapable de tuer des processus individuels.
la source
La réponse canonique à cette question est: avec la coopération du processus, quel que soit le mécanisme qu'il fournit. Sans la coopération du processus, c'est impossible. Le fait que le processus se compose de threads est un détail interne du processus qui, par conception intentionnelle, n'est pas exposé à l'extérieur du processus.
la source
gdb
) au processus, commander tous les threads pour vider la pile, puis se détacher.En plus de la réponse de @ gkv, vous pouvez jeter un œil à la fonction
pthread_cancel(3)
, une partie de<pthread.h>
. Depuis la page de manuel:la source
Vous pouvez trouver tgkill () utile. Il est spécifique à Linux comme le mentionne la page de manuel.
la source