• Linux 多线程环境下 进程线程终止函数小结


    pthread_kill:

    pthread_kill与kill有区别,是向线程发送signal。,大部分signal的默认动作是终止进程的运行,所以,我们才要用signal()去抓信号并加上处理函数。

    int pthread_kill(pthread_t thread, int sig);

    向指定ID的线程发送sig信号,如果线程代码内不做处理,则按照信号默认的行为影响整个进程,也就是说,如果你给一个线程发送了SIGQUIT,但线程却没有实现signal处理函数,则整个进程退出

    pthread_kill(threadid, SIGKILL)杀死整个进程。 如果要获得正确的行为,就需要在线程内实现signal(SIGKILL,sig_handler)。所以,如果int sig的参数不是0,那一定要清楚到底要干什么,而且一定要实现线程的信号处理函数,否则,就会影响整个进程。

    如果int sig是0呢,这是一个保留信号,一个作用是用来判断线程是不是还活着。pthread_kill的返回值: 成功:0 线程不存在:ESRCH 信号不合法:EINVAL

    代码:

    int kill_rc = pthread_kill(thread_id,0);
    
    if(kill_rc == ESRCH) 
            printf("the specified thread did not exists or already quit\n"); 
    
    else if(kill_rc == EINVAL) 
            printf("signal is invalid\n"); 
    else 
            printf("the specified thread is alive\n");

    pthread_cancel

    函数原型:

    int pthread_cancel(pthread_t thread);

    向thread发送一个取消执行的请求。如果成功则返回0,否则为非0值。发送成功并不意味着thread会终止。成功返回零,出错返回非零的出错码ESRCH:没有找到thread指定ID的线程。

    abort和exit的比较

    exit会做一些释放工作:释放所有的静态的全局的对象,缓存,关掉所有的I/O通道,然后终止程序。如果有函数通过atexit来注册,还会按照atexit的相反顺序调用注册的函数。不过,如果atexit函数扔出异常的话,就会直接调用terminate。

    abort:立刻terminate程序,没有任何清理工作。

    这里附上线程基本函数:

    ------------------------------------------------------------------------------------------
                         POSIX函数                                                    描述
    -------------------------------------------------------------------------------------------
                        pthread_create                                    创建一个线程
                        pthread_self                                        找出自己的线程ID
                        pthread_equal                                     测试2个线程ID是否相等
                        pthread_detach                                   设置线程以释放资源
                        pthread_join                                        等待一个线程
                        pthread_cancel                                    终止另一个线程
                        pthread_exit                                        退出线程,而不退出进程
                        pthread_kill                                         向线程发送一个信号
    -------------------------------------------------------------------------------------------
  • 相关阅读:
    基础总结深入:数据类型的分类和判断(数据、内存、变量) 对象 函数 回调函数 IIFE 函数中的this 分号
    BOM 定时器 通过修改元素的类来改变css JSON
    事件 事件的冒泡 事件的委派 事件的绑定 事件的传播
    DOM修改 使用DOM操作CSS
    包装类 Date Math 字符串的相关的方法 正则表达式 DOM DOM查询
    数组 call()、apply()、bind()的使用 this arguments
    autocad 二次开发 最小包围圆算法
    win10 objectarx向导在 vs2015中不起作用的解决办法
    AutoCad 二次开发 jig操作之标注跟随线移动
    AutoCad 二次开发 文字镜像
  • 原文地址:https://www.cnblogs.com/biyeymyhjob/p/2720377.html
Copyright © 2020-2023  润新知