O que é um SIG_0 quando se olha para um strace

1

Anexar strace a um processo que está usando muita CPU, mostra que o pid é 'morto' repetidamente.

O processo está usando 130% de CPU. O que é um 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. 
    
por spuder 08.05.2013 / 23:06

1 resposta

3

Em man tgkill :

tgkill() sends the signal sig to the thread with the thread ID tid in the thread group tgid. (By contrast, kill(2) can only be used to send a signal to a process (i.e., thread group) as a whole, and the signal will be delivered to an arbitrary thread within that process.)

O que nos deixa apenas a questão de qual sinal 0 representa. A resposta é, absolutamente nenhuma :

If you have a process ID but aren't sure whether it's valid, you can use the most unlikely of candidates to test it: the kill command. If you don't see any reference to this on the kill(1) man page, check the info pages. The man/info page states that signal 0 is special and that the exit code from kill tells whether a signal could be sent to the specified process (or processes).

As chamadas tgkill , então, estão testando a existência de vários encadeamentos dentro de qualquer processo que você esteja monitorando via strace . O valor de retorno de 0 indica que os threads testados existem; a pergunta a responder agora é: por que o processo está dando voltas no teste? (Eu suponho que é o que está fazendo, de qualquer forma; presumivelmente, se alguma vez você fez alguma coisa que você viu, você teria mencionado isso em sua pergunta.)

    
por 09.05.2013 / 00:01