O que faz um extinta pthread?
-
02-07-2019 - |
Pergunta
Eu estou trabalhando com um programa multi-threaded (usando pthreads) que atualmente criar uma discussão de fundo (PTHREAD_DETACHED) e, em seguida, invoca pthread_exit (0). Meu problema é que o processo é, então, listado como "extinta" e curiosamente não parece "realmente existe" in / proc (que derrota minhas estratégias de depuração)
Gostaria as seguintes exigências a serem cumpridas:
- o programa deve executar a função Um em um loop e a função B uma vez
- dada a PID do programa / proc / $ pid / exe, / proc / $ pid / mapas e / proc / $ PID / fd deve ser acessível (quando o processo for extinta, eles são todos os links vazios ou inválidos)
- deve ser possível suspender / interromper o programa com CTRL + C e CTRL + Z como de costume
edit: Hesito mudar a interface do programa para ter um no thread "main" e B em um segmento gerado (que estão atualmente na outra maneira). Será que resolver o problema?
Solução
Você pode suspender a execução do principal espera processo para um sinal, ou não retirar o fio (usando o padrão PHTREAD_CRATE_JOINABLE ) à espera de seu término com um pthread_join()
.
Outras dicas
Existe uma razão que você não pode fazer as coisas ao contrário: têm a thread principal executar o loop, e fazer o one-off tarefa na discussão de fundo?
Não é o design mais elegante, mas talvez você poderia bloquear a thread principal antes de sair com:
while(1) {
pause();
}
Em seguida, você pode instalar um manipulador de sinal para SIGINT e SIGTERM que quebra o loop. A maneira mais fácil para isso é: exit (0): -).