linux查看线程是否存活

pthread_kill(),向指定ID的线程发送一个信号,如果线程不处理该信号,则按照信号默认的行为作用于整个进程。信号值0为保留信号,作用是根据函数的返回值判断线程是不是还活着。

pthread_kill的返回值:
成功:0
线程不存在:ESRCH
信号不合法:EINVAL

a.cpp:

/*************************************************************************
    * File: a.cpp
    * Brief:
    * Created Time: Wed 18 Nov 2015 04:43:51 PM PST
 ************************************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
#include<signal.h>
#include<errno.h>
#include<iostream>
using namespace std;

void* thread_fun(void*)
{
    int i=0;
    for(;i<10;i++)
        sleep(1);

    //int a=0;
    //int b=3/a;

    printf("thead exit\n");
    pthread_exit((void *)0);
}

void check(pthread_t tid)
{
    static int seq=1;
    int ret=pthread_kill(tid,0);
    if(ESRCH==ret)
        printf("%02d. ID为0x%x的线程不存在或者已经退出。\n",seq++,(unsigned int)tid);
    else if(EINVAL==ret)
        printf("%02d. 发送信号非法。\n",seq++);
    else
        printf("%02d. ID为0x%x的线程目前仍然存活。\n",seq++,(unsigned int)tid);
}

int main()
{
    pthread_t tid;
    pthread_attr_t attr;
    pthread_attr_init(&attr);
    pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
    pthread_create(&tid,&attr,thread_fun,NULL);

    int i=0;
    for(;i<15;i++)
    {
        check(tid);
        sleep(1);
    }
    printf("done\n");
    return 0;
}

Makefile:

all: a.cpp
    g++ a.cpp -o a.out -lpthread

clean:
    rm -rf a.out

编译运行效果如下:

时间: 2024-07-31 14:30:21

linux查看线程是否存活的相关文章

linux 查看线程和线程数

linux下查看线程方法一.ps [[email protected] ~]# ps -T -p 30557 PID SPID TTY TIME CMD 30557 30557 ? 00:00:00 nginx 二.top top -H -p <pid> 附:查看tomcat进程号:ps -ef | grep tomcat根据进程号查询对应的目录:/proc/pid/cwd.ls -la /proc/pid/fd根据目录查找对应的进程:lsof /usr/local/nginx/查看tomca

linux查看线程状态--jstack

在linux下运行多线程程序,想查看各个线程的运行情况,怎么办? Linux下查看某进程的线程状态: 1.jps或top或ps -ef|grep java,找到需要的进程pid: 2.jstack pid,查看pid的所有线程状态信息: 下面为一个示例:进程6798启动了5个线程,其他两个正在跑,另外三个进入了睡眠状态. [[email protected] topology]# jstack 6798 2015-03-02 09:49:05 Full thread dump Java HotS

Linux查看线程

我的程序在其内部创建并执行了多个线程,我怎样才能在该程序创建线程后监控其中单个线程?我想要看到带有它们名称的单个线程详细情况(如,CPU/内存使用率). 线程是现代操作系统上进行并行执行的一个流行的编程方面的抽象概念.当一个程序内有多个线程被叉分出用以执行多个流时,这些线程就会在它们之间共享特定的资源(如,内存地址空间.打开的文件),以使叉分开销最小化,并避免大量高成本的IPC(进程间通信)通道.这些功能让线程在并发执行时成为一个高效的机制. 在Linux中,程序中创建的线程(也称为轻量级进程,

Linux下多线程查看工具(pstree、ps、pstack),linux命令之-pstree使用说明, linux 查看线程状态。 不指定

0.最常用 pstree:[[email protected] temp]# pstree -a|grep multe  |       |   `-multepoolser  |       |       `-multepoolser  |       |           `-2*[{multepoolser}] 1. > top 可以显示所有系统进程 按u, 再输入相应的执行用户名称,比如Tom 可以看到Tom用户启动的所有进程和对应的pid 2. > pstack pid 可以看到

linux查看某个进程的线程id(spid)

鉴于linux下线程的广泛使用 我们怎么查看某个进程拥有的线程id了 现在很多服务的设计 主进程->子进程->线程(比如mysql,varnish) 主进程负责侦听网络上的连接 并把连接发送给子进程 子进程派生线程去处理这些线程 mysql(父进程460,子进程863) 1 460 425 333 ? -1 S 0 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/storage/mysql/backup --pid-file=/

linux查看修改线程默认栈空间大小(ulimit -s)

linux查看修改线程默认栈空间大小 ulimit -s 1.通过命令 ulimit -s 查看linux的默认栈空间大小,默认情况下 为10240 即10M 2.通过命令 ulimit -s 设置大小值 临时改变栈空间大小:ulimit -s 102400, 即修改为100M 3.可以在/etc/rc.local 内 加入 ulimit -s 102400 则可以开机就设置栈空间大小 4.在/etc/security/limits.conf 中也可以改变栈空间大小: #<domain> &l

Linux查看系统cpu个数、核心书、线程数

Linux查看系统cpu个数.核心书.线程数 现在cpu核心数.线程数越来越高,本文将带你了解如何确定一台服务器有多少个cpu.每个cpu有几个核心.每个核心有几个线程. 查看物理cpu个数 grep 'physical id' /proc/cpuinfo | sort -u 查看核心数量 grep 'core id' /proc/cpuinfo | sort -u | wc -l 查看线程数 grep 'processor' /proc/cpuinfo | sort -u | wc -l 实例

如何查看一个进程中的某个线程是否存活?

pthread_kill: 别被名字吓到,pthread_kill可不是kill,而是向线程发送signal.还记得signal吗,大部分signal的默认动作是终止进程的运行,所以,我们才要用signal()去抓信号并加上处理函数. int pthread_kill(pthread_t thread, int sig); 向指定ID的线程发送sig信号,如果线程代码内不做处理,则按照信号默认的行为影响整个进程,也就是说,如果你给一个线程发送了SIGQUIT,但线程却没有实现signal处理函数

(笔记)Linux 如何查看线程数最佳解决方案

背景:很多学linux的人都会使用ps查看进程状态,却一直不清楚如何查看线程的状态. 方法:可使用ps -a 或 ps -T命令查看 一.使用ps -a命令查看 比如拿我的测试进程./lc300-led-test举例,进程号为522,下一个进程/bin/sh的进程号为526,而522~525就是./lc300-led-test下我要找的线程数,应该就是4个,哈哈!是不是觉得很奇怪,那就使用ps -T命令,可以看下一张图片! 二.ps -T 看一下PID522~525,这一下是不是都明白了!4个线