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?

Foi útil?

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): -).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top