当前位置: 技术问答>linux和unix
请问top命令显示的结果中一个命令为何会出现多次?
来源: 互联网 发布时间:2016-04-21
本文导语: 现在有一个可执行文件catqa,它实现的是一个多线程的操作,其中线程数是作为参数传入的。现在的问题是,当我执行 catqa -t 1 //一个线程 运行top发现开始有一条catqa的纪录,PID为479;过了几秒蹦出一条catqa的纪录...
现在有一个可执行文件catqa,它实现的是一个多线程的操作,其中线程数是作为参数传入的。现在的问题是,当我执行
catqa -t 1 //一个线程
运行top发现开始有一条catqa的纪录,PID为479;过了几秒蹦出一条catqa的纪录,PID为483,此时两条记录同时存在;过了几秒,PID为479得那条记录没了,剩下PID为483的记录,一直到程序退出。
接着我又执行了2个线程的情况
catqa -t 2 //两个线程
运行top发现开始有一条catqa的纪录,PID为484;过了几秒蹦出两条catqa的纪录,PID为488和489,此时三条记录同时存在;过了几秒,PID为484得那条记录没了,剩下PID为488和489两条记录,一直到程序退出。
第一次用top这个命令,被这个问题弄晕了,熟悉这个的牛人们能给我回答一下下面的问题么?
1.top命令的结果里出现多条catqa的记录是多线程引起的么?
2.如果是的话,为什么1个线程最多有2条记录,2个线程最多有3条记录?我自己猜,那是因为有一条记录是主线程的,不知对否?
3.如果2中我的猜想是对的,为啥主线程的PID号跟子线程的差了个4号呢?(这个问题不是很重要,但还是希望弄弄清楚)
4.我现在需要统计catqa执行起来后,占用的CPU百分比,内存百分比等,得怎么做呢?
catqa -t 1 //一个线程
运行top发现开始有一条catqa的纪录,PID为479;过了几秒蹦出一条catqa的纪录,PID为483,此时两条记录同时存在;过了几秒,PID为479得那条记录没了,剩下PID为483的记录,一直到程序退出。
接着我又执行了2个线程的情况
catqa -t 2 //两个线程
运行top发现开始有一条catqa的纪录,PID为484;过了几秒蹦出两条catqa的纪录,PID为488和489,此时三条记录同时存在;过了几秒,PID为484得那条记录没了,剩下PID为488和489两条记录,一直到程序退出。
第一次用top这个命令,被这个问题弄晕了,熟悉这个的牛人们能给我回答一下下面的问题么?
1.top命令的结果里出现多条catqa的记录是多线程引起的么?
2.如果是的话,为什么1个线程最多有2条记录,2个线程最多有3条记录?我自己猜,那是因为有一条记录是主线程的,不知对否?
3.如果2中我的猜想是对的,为啥主线程的PID号跟子线程的差了个4号呢?(这个问题不是很重要,但还是希望弄弄清楚)
4.我现在需要统计catqa执行起来后,占用的CPU百分比,内存百分比等,得怎么做呢?
|
个人认为 1,2跟你的程序是相关的,多线程的话会显示多个的。
|
刚开始的那条记录是相当于进程的概念,是为了系统为其分配资源而产生的
|
你这个应该不是多线程,多线程是共享一个进程的,换句话说它们有相同的进程号
你这个应该是多进程
刚开始那个应该是做初始化,fork子进程用的,所以后来这些工作做完就退出,你就看不到了
进程号差4可能是在fork之前调用了其它命令做了一些初始化之类的工作
稳定之后如果不再继续fork,也就是说479退出后483可以一直执行到工作结束,你就统计483的就差不多了
你这个应该是多进程
刚开始那个应该是做初始化,fork子进程用的,所以后来这些工作做完就退出,你就看不到了
进程号差4可能是在fork之前调用了其它命令做了一些初始化之类的工作
稳定之后如果不再继续fork,也就是说479退出后483可以一直执行到工作结束,你就统计483的就差不多了