linux 获取线程,linux编译安装软件
其实linux 获取线程的问题并不复杂,但是又很多的朋友都不太了解linux编译安装软件,因此呢,今天小编就来为大家分享linux 获取线程的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!
如何在Windows和Linux下获取当前线程的ID号
Linux下获取当前线程ID号函数:
pthread_t pthread_self();
返回:当前线程的ID号
pthread_t数据类型的定义如下:
typedef unsigned long int pthread_t;
sizeof(pthread_t)= 4,4个字节的整数。
Windows下获取当前线程ID号的函数:
DWORD GetCurrentThreadId();
返回值:当前线程的ID号
DWORD数据类型定义:
typedef unsigned long DWORD;
在Windows下pthread-win库的pthread_t定义如下:
typedef struct{
void* p;/*Pointer to actual object*/
unsigned int x;/*Extra information- reuse count etc*/
} ptw32_handle_t;
typedef ptw32_handle_t pthread_t;
与Linux的thread_t不一样,它是一个结构,不是一个整数值
在Windows和Linux下可用的获取线程ID号的内联函数如下:
#ifdef WIN32
#include<windows.h>
#else
#include<pthread.h>
#endif
inline unsigned int PthreadSelf()
{
#ifdef WIN32
return::GetCurrentThreadId();
#else
returnthread_self();
#endif
}
linux查看线程状态命令linux查看线程状态
linux中的线程有哪几种状态?
就绪:线程分配了CPU以外的全部资源,等待获得CPU调度执行:线程获得CPU,正在执行阻塞:线程由于发生I/O或者其他的操作导致无法继续执行,就放弃处理机,转入线程就绪队列挂起:由于终端请求,操作系统的要求等原因,导致挂起。
怎么在linux系统下查看网卡状态信息?
方法一:
ethtooleth0采用此命令可以查看到网卡相关的技术指标。
(不一定所有网卡都支持此命令)
ethtool-ieth1加上-i参数查看网卡驱动。
可以尝试其它参数查看网卡相关技术参数。
方法二:
也可以通过dmesg|grepeth0等看到网卡名字(厂家)等信息。
通过查看/etc/sysconfig/network-scripts/ifcfg-eth0可以看到当前的网卡配置包括IP、网关地址等信息。
当然也可以通过ifconfig命令查看。
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux操作系统诞生于1991年10月5日(这是第一次正式向外公布时间)。Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU工程各种工具和数据库的操作系统。
Linux如何查看线程数最佳解决方案?
1、top-H手册中说:-H:Threadstoggle加上这个选项启动top,top一行显示一个线程。否则,它一行显示一个进程。
2、psxH手册中说:HShowthreadsasiftheywereprocesses这样可以查看所有存在的线程。
3、ps-mp
linux怎么指定线程库?
大概的介绍一下Linux的指定CPU运行,包括进程和线程。linux下的top命令是可以查看当前的cpu的运行状态,按1可以查看系统有多少个CPU,以及每个CPU的运行状态。可是如何查看线程的CPU呢?
top-Hppid,pid就是你当前程序的进程号,如果是多线程的话,是可以查看进程内所有线程的CPU和内存使用情况。
pstree可以查看主次线程,同样的pstree-ppid。可以查看进程的线程情况。
taskset这个其实才是重点,可以查看以及设置当前进程或线程运行的CPU(设置亲和力)。
taskset-pcpid,查看当前进程的cpu,当然有的时候不只是一个,taskset-pccpu_numpid,cpu_num就是设置的cpu。这样的话基本的命令和操作其实大家都知道了,接下来就是在代码中完成这些操作,并通过命令去验证代码的成功率。进程制定CPU运行:
viewplaincopy#include#include#include#include#include#define__USE_GNU#include#include#includeintmain(intargc,char*argv){//sysconf获取有几个CPUintnum=sysconf(_SC_NPROCESSORS_CONF);intcreated_thread=0;intmyid;inti;intj=0;//原理其实很简单,就是通过cpu_set_t进行位与操作cpu_set_tmask;cpu_set_tget;if(argc!=2){printf(usage:./cpunumn);exit(1);}myid=atoi(argv)
;printf(systemhas%iprocessor(s).n,num)
;//先进行清空,然后设置掩码CPU_ZERO(mask);CPU_SET(myid,mask)
;//设置进程的亲和力if(sched_setaffinity(0,sizeof(mask),mask)==-1){printf(warning:couldnotsetCPUaffinity,continuing...n);}while(1){CPU_ZERO(get);//获取当前进程的亲和力if(sched_getaffinity(0,sizeof(get),get)==-1){printf(warning:coundnotgetcpuaffinity,continuing...n);}for(i=0;inum;i++){if(CPU_ISSET(i,get)){printf(thisprocess%disrunningprocessor:%dn,getpid(),i);}}}return0;}进程设置CPU运行,其实只能是单线程。多线程设定CPU如下:
viewplaincopy#define_GNU_SOURCE#include#include#include#include#include#includevoid*myfun(void*arg){cpu_set_tmask;cpu_set_tget;charbuf;inti;intj;//同样的先去获取CPU的个数intnum=sysconf(_SC_NPROCESSORS_CONF);printf(systemhas%dprocessor(s)n,num);for(i=0;inum;i++){CPU_ZERO(mask);CPU_SET(i,mask);//这个其实和设置进程的亲和力基本是一样的if(pthread_setaffinity_np(pthread_self(),sizeof(mask),mask)0){fprintf(stderr,setthreadaffinityfailedn);}CPU_ZERO(get);if(pthread_getaffinity_np(pthread_self(),sizeof(get),get)0){fprintf(stderr,getthreadaffinityfailedn);}for(j=0;jnum;j++){if(CPU_ISSET(j,get)){printf(thread%disrunninginprocessor%dn,(int)pthread_self(),j);}}j=0;while(j++100000000){memset(buf,0,sizeof(buf));}}pthread_exit(NULL);}intmain(intargc,char*argv){pthread_ttid;if(pthread_create(tid,NULL,(void*)myfun,NULL)!=0){fprintf(stderr,threadcreatefailedn);return-1;}pthread_join(tid,NULL);return0;}
linux 下怎样获取当前活着的线程数
三种方法:
1。使用top命令,具体用法是 top-H
加上这个选项,top的每一行就不是显示一个进程,而是一个线程。
2。使用ps命令,具体用法是 ps-xH
这样可以查看所有存在的线程,也可以使用grep作进一步的过滤。
3。使用ps命令,具体用法是 ps-mq PID
这样可以看到指定的进程产生的线程数目。
更进一步,其实一些系统监控工具,在本质上也是读取的系统产生的文件罢了。比如说进程这个事情,
现在假设有进程号为 5000的进程,查看这个进程的所有具体信息,在哪查看呢?
看看这个目录吧,/proc/5000/这里面有你所有想要的。其实stat代表着当前的一些信息。
使用ps命令来查看进程的时候,进程状态分别对应的含义如下:
D不可中断睡眠(通常是在IO操作)收到信号不唤醒和不可运行,进程必须等待直到有中断发生
R正在运行或可运行(在运行队列排队中)
S可中断睡眠(休眠中,受阻,在等待某个条件的形成或接受到信号)
T已停止的进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行
W正在换页(2.6.内核之前有效)
X死进程(未开启)
Z僵尸进程进程已终止,但进程描述符存在,直到父进程调用wait4()系统调用后释放BSD风格的
<高优先级(not nice to other users)
N低优先级(nice to other users)
L页面锁定在内存(实时和定制的IO)
s一个信息头
l多线程(使用 CLONE_THREAD,像NPTL的pthreads的那样)
+在前台进程组