Wie töte ich einen einzelnen Thread von Terminal in Ubuntu?


7

Ich bin neu in Ubuntu und neu hier. Ich muss das wissen.

Wie töte ich einen einzelnen Thread von Terminal in Ubuntu? Ich habe Mozilla geöffnet und es hat 45 Fäden. Ich möchte eines davon töten.

Ich habe bereits viele Quellen online durchsucht, aber ohne Erfolg. Kann mir jemand helfen?


Vielleicht möchten Sie einen Blick auf die Manpages von pgrepund werfen pkill. Geben Sie man pgrepoder man pkillin Ihr Terminal ein. Verlassen Sie die Manpage durch Drücken von q.
Byte Commander

2
Was erwarten Sie, wenn Sie einen Thread einer Anwendung beenden konnten? Multithread-Programme funktionieren als Ganzes, und ein unerwartetes Beenden eines seiner Threads führt fast immer zu undefinierten Ergebnissen, wodurch die Anwendung normalerweise abstürzt. Machen Sie sich auch keine Sorgen, dass ein Programm so viele Threads verwendet, es ist vollkommen in Ordnung - und die Anzahl der Threads hängt nicht eng mit der Ressourcennutzung zusammen. Wenn also nicht viele dieser Threads kostspielige Vorgänge ausführen, sollte Ihr System mit ihnen in Ordnung sein.
Rafał Cieślak

Antworten:


5

Das kannst du nicht. Nicht ohne den ganzen Prozess zu beenden. Von man 3 pthread_kill, eine Funktion zur Signalverarbeitung:

NOTES
   Signal dispositions are process-wide: if a signal handler is installed,
   the  handler  will  be  invoked  in  the  thread  thread,  but  if  the
   disposition  of  the signal is "stop", "continue", or "terminate", this
   action will affect the whole process.

Siehe auch diesen U & L-Beitrag .


Aha. Vielen Dank für die Eingabe. Was ist mit den Befehlen tkill () und tgkill ()?
Daren Tan

@DarenTan das sind keine Befehle, sondern Funktionen, die im Code verwendet werden sollen. In jedem Fall wirkt sich das Stoppen, Fortfahren oder Beenden auf den gesamten Prozess aus, unabhängig von der verwendeten Funktion. Siehe zum Beispiel stackoverflow.com/a/27000635/2072269
muru

Ok, aber es sollte eine Möglichkeit geben, ein weiteres Signal an nur einen Thread zu senden, oder? In meinem Fall suche ich danach, um den Debugger im Thread zu starten, um zu sehen, was tut. Ich denke, tgkill () braucht eine Kommandozeilenschnittstelle.
Yucer

@yucer, wenn es sich um ein anderes als die drei oben genannten Signale handelt und wenn für diesen Thread ein Handler installiert ist, sicher.
Muru

Die Kill-Befehle unterstützen alle mit "kill -l" angezeigten. Beziehen sich alle auf "Stop", "Continue" oder "Terminate"? Ich suche einen, der einem bestimmten Thread anweist, seinen Stack-Trace zu sichern, um zu sehen, was er tut. Und ja, der Thread ist bereits bereit, ein Signal zu verarbeiten.
Yucer

0

Dies scheint das Ziel von tgkill zu sein, aber es ist unwahrscheinlich, dass es der beste Weg ist, mit zu vielen Threads umzugehen, die von der Anwendung geöffnet wurden. Es sollte als eine Art Debugging-Tool behandelt werden.


-1

Im Terminaltyp:

kill -9 "pid number for the process"

Zum Beispiel:

kill -9 5624 (number 9 is the code for kill signal)

Um die PID-Nummer für den Prozess zu erhalten, verwenden Sie entweder:

ps -eLF

oder Sie könnten den Befehl verwenden:

top

Jeder Prozess hat eine eigene PID-Nummer. Der Grund dafür ist, dass Prozesse gleich benannt werden können.


1
Wie ich bisher gelesen habe, bedeutet Töten, den gesamten Prozess zu beenden, oder? In meinem Fall möchte ich jedoch nur einen einzelnen Thread innerhalb eines Prozesses mit mehreren Threads beenden.
Daren Tan

Es geht wirklich darum, den Prozess insgesamt zu beenden. Es hat nichts mit Threads zu tun.
Bergercookie

Dies beendet den Prozess, den er bittet, einen einzelnen Thread eines Prozesses zu beenden.
Francesco Boi
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.