Was ist ein SIG_0 beim Betrachten einer Strace?

1610
spuder

Wenn Sie strace an einen Prozess anhängen, der eine Menge CPU verwendet, zeigt dies, dass die PID immer wieder "abgetötet" wird.

Der Prozess verwendet 130% CPU. Was ist ein tgkill (SIG_0)?

strace -p 3876   nanosleep(, NULL) = 0  tgkill(3876, 3884, SIG_0) = 0  tgkill(3876, 3885, SIG_0) = 0 ...repeats over and over.  
1

1 Antwort auf die Frage

3
Aaron Miller

Von man tgkill:

tgkill () sendet das Signal sig an den Thread mit der Thread-ID tid in der Thread-Gruppe tgid. (Im Gegensatz dazu kann kill (2) nur verwendet werden, um ein Signal als Ganzes an einen Prozess (dh eine Thread-Gruppe) zu senden, und das Signal wird an einen beliebigen Thread innerhalb dieses Prozesses übergeben.)

Was uns nur die Frage lässt, welches Signal 0 darstellt. Die Antwort ist überhaupt keine :

Wenn Sie eine Prozess-ID haben, aber nicht sicher sind, ob sie gültig ist, können Sie zum Testen die unwahrscheinlichsten Kandidaten verwenden: den Befehl „kill“. Wenn Sie auf der Manpage kill (1) keinen Hinweis darauf finden, überprüfen Sie die Infoseiten. Die Man / Info-Seite besagt, dass das Signal 0 speziell ist und dass der Beendigungscode von kill angibt, ob ein Signal an den angegebenen Prozess (oder die Prozesse) gesendet werden könnte.

Die tgkillAufrufe testen dann das Vorhandensein verschiedener Threads in jedem Prozess, den Sie über überwachen strace. Der Rückgabewert 0 gibt an, dass die so getesteten Threads vorhanden sind. Die Frage, die Sie jetzt beantworten müssen, lautet: Warum läuft der Prozess während des Tests? (Ich gehe davon aus, dass es das ist, was es jedenfalls tut. Vermutlich, wenn es irgendetwas anderes getan hätte, was Sie gesehen haben, hätten Sie es in Ihrer Frage erwähnt.)