Co to jest SIG_0, gdy patrzy się na strace

1

Dołączenie strace do procesu, który wykorzystuje dużo procesora, pokazuje, że pid jest „zabijany” w kółko.

Proces wykorzystuje 130% procesora. Co to jest tgkill (SIG_0)?

strace -p 3876 

nanosleep({0, 100000}, NULL) = 0 
tgkill(3876, 3884, SIG_0) = 0 
tgkill(3876, 3885, SIG_0) = 0 ...repeats over and over. 
spuder
źródło

Odpowiedzi:

3

Od man tgkill:

tgkill () wysyła sygnał sig do wątku z identyfikatorem wątku tid w grupie wątków tgid. (Z drugiej strony, kill (2) może być użyty tylko do wysłania sygnału do procesu (tj. Grupy wątków) jako całości, a sygnał zostanie dostarczony do dowolnego wątku w ramach tego procesu.)

Co tylko pozostawia nam pytanie, co oznacza sygnał 0. Odpowiedź brzmi: w ogóle nie ma :

Jeśli masz identyfikator procesu, ale nie masz pewności, czy jest on prawidłowy, możesz użyć najbardziej mało prawdopodobnego kandydata do przetestowania go: polecenie kill. Jeśli nie widzisz żadnego odniesienia do tego na stronie podręcznika kill (1), sprawdź strony informacyjne. Strona man / info stwierdza, że ​​sygnał 0 jest specjalny i że kod wyjścia z kill informuje, czy sygnał może zostać wysłany do określonego procesu (lub procesów).

Do tgkillpołączenia, następnie testują na istnienie różnych wątków wewnątrz cokolwiek proces monitorowania poprzez jesteś strace. Zwracana wartość 0 wskazuje, że tak przetestowane wątki istnieją; pytanie, na które należy teraz odpowiedzieć, dlaczego proces zapętla się w teście? (Zakładam, że tak się dzieje, w każdym razie; przypuszczalnie, gdyby kiedykolwiek zrobił coś innego, co widziałeś, wspomniałbyś o tym w swoim pytaniu).

Aaron Miller
źródło