$ ps -e -T | grep myp | grep -v grep
797 797 ? 00:00:00 myp
797 798 ? 00:00:00 myp
797 799 ? 00:00:00 myp
797 800 ? 00:00:00 myp
Isso mostra o processo myp
com PID = 797 e quatro threads com diferentes SPIDs.
Como posso matar um segmento específico do processo sem matar todo o processo. Entendo que talvez não seja possível em alguns casos quando houver dependências fatais nesse segmento específico. Mas, é possível em qualquer caso? Sim, como?
Eu tentei kill 799
e o processo em si foi encerrado. Agora, não tenho certeza de que isso ocorreu porque houve dependências que myp
falharam sem o processo 800
ou porque o kill é simples e não é capaz de matar processos individuais.
fonte
A resposta canônica para essa pergunta é: Com a cooperação do processo, por qualquer mecanismo que ele forneça. Sem a cooperação do processo, é impossível. O fato de o processo consistir em encadeamentos é um detalhe interno do processo que, por design intencional, não é exposto fora do processo.
fonte
gdb
) ao processo, comandar todos os threads para despejar a pilha e desanexar.Além da resposta do @ gkv, você pode dar uma olhada na função
pthread_cancel(3)
, parte de<pthread.h>
. Na página do manual:fonte
Você pode achar tgkill () útil. É específico do Linux, como a página de manual menciona.
fonte