У вас есть две проблемы в вашем коде:
1) Сигнал SIGRTMIN
немедленно уничтожит поток, прежде чем sigwait()
сможет удалить его из очереди. Если вы хотите, чтобы sigwait
на самом деле возвращало , вы должны установить для него обработчик сигнала:
void sigh(int s){}
void *fun(void *arg)
{
struct sigaction sa;
sa.sa_handler = sigh;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
sigaction(SIGRTMIN, &sa, 0);
...
2) Возможно, вы возвращаетесь с main()
до того, как дочерний поток получилвыход, который снова может убить его, прежде чем можно будет напечатать «После». Позвоните pthread_join(obj, 0)
или хотя бы добавьте sleep(1)
после pthread_kill
.