$ 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
Dies zeigt den Prozess myp
mit PID = 797 und vier Threads mit unterschiedlichen SPIDs.
Wie kann ich einen bestimmten Thread des Prozesses beenden, ohne den gesamten Prozess zu beenden? Ich verstehe, dass es in einigen Fällen möglicherweise überhaupt nicht möglich ist, wenn schwerwiegende Abhängigkeiten von diesem bestimmten Thread bestehen. Aber ist das auf jeden Fall möglich? Ist ja wie
Ich habe es versucht kill 799
und der Prozess selbst wurde abgebrochen. Ich bin mir nicht sicher, ob dies daran lag, dass Abhängigkeiten myp
fehlgeschlagen sind, ohne dass der Prozess ausgeführt wurde, 800
oder dass kill einfach nicht in der Lage ist, einzelne Prozesse zu beenden.
quelle
Die kanonische Antwort auf diese Frage lautet: Mit der Kooperation des Prozesses, durch welchen Mechanismus auch immer. Ohne die Mitarbeit des Prozesses ist es unmöglich. Dass der Prozess aus Threads besteht, ist ein internes Detail des Prozesses, das absichtlich nicht außerhalb des Prozesses verfügbar gemacht wird.
quelle
gdb
) an den Prozess anzuhängen , alle Threads anzuweisen, den Stack zu sichern und dann die Verbindung zu trennen.Neben der Antwort von @ gkv können Sie einen Blick auf die Funktion werfen
pthread_cancel(3)
, die Teil von ist<pthread.h>
. Von der Manpage:quelle
Sie können tgkill () nützlich finden. Es ist Linux-spezifisch, wie in der Manpage erwähnt.
quelle