Linux多进程多线程编程程的时候怎么查看一个进程中的

Stay hungry, stay foolish.
2012年六月
1820212324
2526272930君,已阅读到文档的结尾了呢~~
linux多线程编程,linux多线程编程 pdf,linux多线程,linux多线程编程实例,linux多线程设计,linux 多线程下载,多线程编程,posix多线程程序设计,linux多进程编程,多线程
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
linux多线程编程
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口linux查看某个进程CPU消耗较高的具体线程或程序的方法 - 江湖孤客任 - ITeye博客
博客分类:
目前我们的监控,可以发现消耗较高CPU的进程(阀值为3个CPU),通过监控我们可以找到消耗较高CPU的进程号;
通过进程号pid,我们在linux上可以通过top –H –p &pid&命令,显示该进程中每个线程的CPU资源消耗情况。
然后通过threadump命令,可以打印出某个应用JVM中某时刻所有线程的调用情况,通过线程号我们就可以对应找到线程调用的程序了。
使用jrcmd命令也可以进行threadump和进程执行线程情况的查看,但该命令为jrockit 5.0 新带的命令,在wls81用户下,我们没有执行权限,但可以联系中间件帮忙执行。
1. 进入到jrockit/bin目录下 2. 打./jrcmd 回车,会看到当前所有在执行中的java进程的PID号 3. 打./jrcmd [PID] help 回车,会看到指定java进程支持的操作 4. 打./jrcmd [PID] print_threads & xxxFile,可以把当前java进程中的所有线程堆栈轨迹打印到指定文件中
[serviceop@CNSZ031330 wls]$ top
SHR S %CPU %MEM
228961 wls81
714m 637m 1804 S 755.7
0.2 383:24.53 java
[serviceop@CNSZ031330 wls]$ top -H -p 228961
top - 13:37:01 up 156 days, 16:11,
load average: 14.24, 13.82, 12.88
Tasks: 140 total,
23 running, 117 sleeping,
0 stopped,
Cpu(s): 25.6%us,
0.0%ni, 72.6%id,
k total, k used, k free,
4547804k buffers
3145720k total,
464k used,
3145256k free, k cached
SHR S %CPU %MEM
229077 wls81
714m 637m 1804 R 32.6
7:11.79 ExecuteThread:
229093 wls81
714m 637m 1804 R 32.6
23:41.47 ExecuteThread:
229073 wls81
714m 637m 1804 R 32.2
2:24.30 ExecuteThread:
229076 wls81
714m 637m 1804 R 32.2
2:22.75 ExecuteThread:
229078 wls81
714m 637m 1804 R 32.2
7:21.38 ExecuteThread:
229082 wls81
714m 637m 1804 R 32.2
10:14.74 ExecuteThread:
229084 wls81
714m 637m 1804 R 32.2
8:43.72 ExecuteThread:
229085 wls81
714m 637m 1804 R 32.2
12:45.62 ExecuteThread:
229087 wls81
714m 637m 1804 R 32.2
19:11.79 ExecuteThread:
229089 wls81
714m 637m 1804 R 32.2
23:22.67 ExecuteThread:
229075 wls81
714m 637m 1804 R 31.9
5:06.52 ExecuteThread:
229088 wls81
714m 637m 1804 R 31.9
13:19.55 ExecuteThread:
229090 wls81
714m 637m 1804 R 31.9
23:53.55 ExecuteThread:
229092 wls81
714m 637m 1804 R 31.9
24:20.10 ExecuteThread:
229094 wls81
714m 637m 1804 R 31.9
33:25.41 ExecuteThread:
229095 wls81
714m 637m 1804 R 31.9
33:41.20 ExecuteThread:
229096 wls81
714m 637m 1804 R 31.9
36:22.72 ExecuteThread:
229081 wls81
714m 637m 1804 R 31.6
7:28.80 ExecuteThread:
229083 wls81
714m 637m 1804 R 31.6
11:05.48 ExecuteThread:
229086 wls81
714m 637m 1804 R 31.6
11:40.36 ExecuteThread:
229091 wls81
714m 637m 1804 R 31.6
17:53.92 ExecuteThread:
229097 wls81
714m 637m 1804 R 31.6
32:41.28 ExecuteThread:
229079 wls81
714m 637m 1804 R 31.2
7:33.44 ExecuteThread:
229080 wls81
714m 637m 1804 S
0:14.13 ExecuteThread:
228963 wls81
714m 637m 1804 S
0:13.44 (GC Main Thread
229070 wls81
714m 637m 1804 S
0:05.97 ExecuteThread:
229664 wls81
714m 637m 1804 S
0:08.69 pool-1-thread-7
Threadump信息片段:
"ExecuteThread: '35' for queue: 'weblogic.kernel.Default'" id=44 idx=0xd4 tid=229083 prio=5 alive, daemon
at java/util/HashMap.get(HashMap.java:319)
at com/paic/abbs/biz/service/common/impl/HardCodeServiceImpl.getString(HardCodeServiceImpl.java:115)
at com/paic/abbs/biz/service/util/impl/UtilServicesImpl.isExpected(UtilServicesImpl.java:45)
at com/paic/abbs/biz/service/common/impl/AbbsInternetServiceImpl.policyIssuing(AbbsInternetServiceImpl.java:3156)
at com/paic/abbs/biz/service/common/impl/AbbsInternetServiceImpl.procRequest(AbbsInternetServiceImpl.java:218)
at com/paic/abbs/biz/service/common/impl/AbbsInternetServiceImpl.handleRequest(AbbsInternetServiceImpl.java:122)
at com/paic/abbs/biz/service/common/impl/AbbsInternetService_gwxgqo_EOImpl.handleRequest(AbbsInternetService_gwxgqo_EOImpl.java:262)
at sun/reflect/GeneratedMethodAccessor287.invoke(Ljava/lang/O[Ljava/lang/O)Ljava/lang/O(Unknown Source)
at sun/reflect/DelegatingMethodAccessorImpl.invoke(DelegatingMethodA
浏览 10135
新来的菜鸟
浏览: 75550 次
来自: 上海Linux中查看进程的多线程
-08%-18%-49%
在SMP系统中,我们的应用程序经常使用多线程的技术,那么在Linux中如何查看某个进程的多个线程呢?
本文介绍3种命令来查看Linux系统中的线程(LWP)的情况:
在我的系统中,用qemu-system-x86_64命令启动了一个SMP的Guest,所以有几个qemu的线程,以此为例来说明。
1. pstree 命令
查看进程和线程的树形结构关系
[root@jay-linux ~]# pstree | grep qemu
|-terminal-+-bash---qemu-sys---2*[{qemu-system-x8}]
[root@jay-linux ~]# pstree -p | grep qemu
|-terminal(194)-+-bash(196)---qemu-sys(657)-+-{qemu}(660)
`-{qemu}(661)
2. ps 命令
-L参数显示进程,并尽量显示其LWP(线程ID)和NLWP(线程的个数)。
[root@jay-linux ~]# ps -eLf | grep qemu
657 196 657
0 3 13:48 pts/1 00:00:00 qemu-sys -m 1024 -smp 2
657 196 660
3 3 13:48 pts/1 00:00:26 qemu-sys -m 1024 -smp 2
657 196 661
2 3 13:48 pts/1 00:00:19 qemu-sys -m 1024 -smp 2
0 1 14:02 pts/0 00:00:00 grep --color=auto qemu
上面命令查询结果的第二列为PID,第三列为PPID,第四列为LWP,第六列为NLWP。
另外,ps命令还可以查看线程在哪个CPU上运行,命令如下:
[root@jay-linux ~]# ps -eo ruser,pid,ppid,lwp,psr,args -L | grep qemu
657 196 657
1 qemu-sys -hda smep-temp.qcow -m 1024 -smp 2
657 196 660
1 qemu-sys -hda smep-temp.qcow -m 1024 -smp 2
657 196 661
2 qemu-sys -hda smep-temp.qcow -m 1024 -smp 2
1 grep --color=auto qemu
其中,每一列依次为:用户ID,进程ID,父进程ID,线程ID,运行该线程的CPU的序号,命令行参数(包括命令本身)。
3. top 命令
其中H命令可以显示各个线程的情况。(在top命令后,按H键;或者top -H)
[root@jay-linux ~]# top -H
top - 14:18:20 up 22:32,
load average: 2.00, 1.99, 1.90
Tasks: 286 total,
1 running, 285 sleeping,
0 stopped,
0.0%ni,100.0%id,
3943892k total,
1541540k used,
2402352k free,
164404k buffers
4194300k total,
4194300k free,
787768k cached
SHR S %CPU %MEM TIME+
0 m 2752 S
0:46.78 qemu-sys
0 m 2752 S
0:39.44 qemu-sys
0:00.07 top
0:00.34 init
0:00.02 kthreadd
在top中也可以查看进程(进程)在哪个CPU上执行的。
执行top后,按f,按j(选中* J: P = Last used cpu (SMP)),然后按空格或回车退出设置,在top的显示中会多出P这一列是最近一次运行该线程(进程)的CPU.
SHR S %CPU %MEM TIME+
0 m 2752 S
0:44.24 3 qemu-sys
0 m 2752 S
0:51.74 0 qemu-sys
0:00.32 2 top
0:00.34 0 init
0:00.02 1 kthreadd
更多信息,请 man pstree, man top, man ps 查看帮助文档。
注: LWP为轻量级进程(即:线程),(light weight process, or thread) 。
上一篇:下一篇:
分享到微信
打开微信,点击顶部的“╋”,
使用“扫一扫”将网页分享至微信。
请将我们加入您的广告过滤器的白名单,请支持开源站点。谢谢您。linux/unix(91)
pthread_kill:
别被名字吓到,pthread_kill可不是kill,而是向线程发送signal。还记得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,那一定要清楚到底要干什么,而且一定要实现线程的信号处理函数,否则,就会影响整个进程。
OK,如果int sig是0呢,这是一个保留信号,一个作用是用来判断线程是不是还活着。
我们来看一下pthread_kill的返回值:
线程不存在:ESRCH
信号不合法:EINVAL
所以,pthread_kill(threadid,0)就很有用啦。
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&);
printf(&the specified thread is alive/n&);
上述的代码就可以判断线程是不是还活着了。&
使用pthread_kill函数检测一个线程是否还活着的程序,在linux环境下gcc编译通过,现将代码贴在下面:
/*******************************&pthread_kill.c&*******************************/
#include &stdio.h&
#include &stdlib.h&
#include &pthread.h&
#include &errno.h&
void *func1()/*1秒钟之后退出*/
printf(&线程1(ID:0x%x)退出。/n&,(unsigned int)pthread_self());
pthread_exit((void *)0);
void *func2()/*5秒钟之后退出*/
printf(&线程2(ID:0x%x)退出。/n&,(unsigned int)pthread_self());
pthread_exit((void *)0);
void test_pthread(pthread_t tid) /*pthread_kill的返回值:成功(0)&线程不存在(ESRCH)&信号不合法(EINVAL)*/
int pthread_kill_
pthread_kill_err = pthread_kill(tid,0);
if(pthread_kill_err == ESRCH)
printf(&ID为0x%x的线程不存在或者已经退出。/n&,(unsigned int)tid);
else if(pthread_kill_err == EINVAL)
printf(&发送信号非法。/n&);
printf(&ID为0x%x的线程目前仍然存活。/n&,(unsigned int)tid);
int main()
pthread_t tid1,tid2;
pthread_create(&tid1,NULL,func1,NULL);
pthread_create(&tid2,NULL,func2,NULL);
sleep(3);/*创建两个进程3秒钟之后,分别测试一下它们是否还活着*/
test_pthread(tid1);/*测试ID为tid1的线程是否存在*/
test_pthread(tid2);/*测试ID为tid2的线程是否存在*/
编译:gcc -o pthread_kill -lpthread pthread_kill.c
运行:./pthread_kill
///////////////////////// 运行结果 /////////////////////////////
线程1(ID:0xb7e95b90)退出。
ID为0xb7e95b90的线程不存在或者已经退出。
ID为0xb7694b90的线程目前仍然存活。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:403800次
积分:6166
积分:6166
排名:第3968名
原创:132篇
转载:565篇
评论:15条
(2)(27)(21)(46)(57)(24)(11)(13)(14)(14)(31)(19)(105)(57)(33)(13)(39)(18)(4)(26)(9)(1)(1)(2)(2)(1)(3)(3)(5)(3)(8)(9)(14)(5)(14)(16)(21)(3)(1)(1)(2)(1)(2)

我要回帖

更多关于 linux查看进程命令 的文章

 

随机推荐