如何不使用pthread_cancel而杀死线程


During the time I use standalone cross compliers to build my system, I find there is NO pthread_cancel in pthread.h (/home/dengwei/standalone-toolchain/sysroot/usr/include/pthread.h).

Shocked by that, but here comes the solution, by using pthread_kill to send a signal , and adding a signal handler :

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
#include <errno.h>
pthread_t pid;
void handle_quit( int signo)
{
    printf( " in qq handle sig %d \n ", signo);
    pthread_exit(NULL);
    
}
void* test( void *arg)
{
    signal(SIGQUIT,handle_quit );
     for( int i= 0;i< 100;i++)
    {
        printf( " in pthread test \n ");
        sleep( 1);
    }

}
int main( void)
{
    printf( " begin \n ");
    pthread_create(&pid, NULL , test, NULL);
    sleep( 3);
     if(pthread_kill(pid,  0)!= ESRCH)
    {
        printf( " thread %d exists!\n ", pid);
        pthread_kill(pid, SIGQUIT);
//         pthread_exit(NULL); // this won't work
        printf( " after kill\n ");
    }

    sleep( 1);
    printf( " exit in main\n ");
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM