【Linux 应用开发】pthread_kill() 检查线程是否存在

发布时间 2023-09-14 22:10:27作者: FBshark

这个函数是什么?:

该函数可以用于向指定的线程发送信号:

int pthread_kill(pthread_t threadId,int signal);

如果线程内不对信号进行处理,则调用默认的处理程式,如SIGQUIT会退出终止线程,SIGKILL会杀死线程等等,可以调用signal(SIGQUIT, sig_process_routine); 来自定义信号的处理程序。

传递的pthread_kill的signal参数一般都是大于0的,这时系统默认或者自定义的都是有相应的处理程序。

signal为0时,是一个被保留的信号,一般用这个保留的信号测试线程是否存在。

 

pthread_kill 返回值如下:

0:调用成功。

ESRCH:线程不存在。

EINVAL:信号不合法。

 

实例程序:

int kill_ret = pthread_kill(thread_id,0);

if(kill_ret == ESRCH)
    printf("指定的线程不存在或者是已经终止\n");
else if(kill_ret == EINVAL)
    printf("调用传递一个无用的信号\n");
else
    printf("线程存在\n");

 

我的实际编程经历:

今天编程用到了 pthread_kill, 编译后发现 ESRCH 未定义。

根据下面的描述,可以把 if(kill_ret == ESRCH) 改成 if(kill_ret != 0)  用于检测线程本身是否存在。