Você pode usar tgkill (2) ou tkill
no seu programa em C (você precisará usar syscall (2) ), mas você não não quer . De dentro do seu programa você pode usar pthread_kill (3) - que raramente é útil. / p>
(não sei exatamente qual efeito teria tgkill
ou tkill
- por exemplo, com SIGKILL
ou SIGTERM
- em um thread)
A biblioteca pthreads (7) usa material de baixo nível (incluindo alguns < href="http://man7.org/linux/man-pages/man7/signal.7.html"> sinal (7) -s e futex(7) -s etc ...; veja também nptl (7) ) e se você matou raw (com tkill
ou tgkill
) algum thread individual, seu processo estaria em algum estado errado (então comportamento indefinido ) porque alguma invariante interna seria quebrada.
Portanto, estude a documentação do seu programa receptor de pacotes e encontre outro caminho. Se for software livre , estude seu código-fonte e melhore-o.
Leia com mais atenção sinal (7) e sinal-segurança(7) . Os sinais devem ser enviados para processos (por kill (2) ) e tratados em threads.
E na prática, sinais e tópicos não se casam bem. Leia alguns tutorial de pthread .
Um truque comum, quando codificar um programa multi-threaded (e querer lidar com sinais externos como SIGTERM
) é usar um pipe (7) para o seu próprio processo e poll (2) aquele pipe em algum outro thread (você também pode considerar o específico do Linux signalfd (2) ), com um manipulador de sinais escreva ( 2) - inserindo um byte ou alguns deles naquele tubo. Esse truque bem conhecido é bem explicado na documentação do Qt (e você pode usá-lo em seu próprio programa , mesmo sem Qt).