亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 24602900 | 回復(fù): 24602900
打印 上一主題 下一主題

在程序中創(chuàng)建一個線程,PS查看發(fā)現(xiàn)有三個相同名稱的進(jìn)程 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2008-07-22 11:01 |只看該作者 |倒序瀏覽
程序名叫foo
int main(void)
{
      ...
      pthread_create(&tud, NULL, my_thread, NULL);
      
      while (1) {
               do something;
       }
}

void * my_thread(void *arg)
{
      while (1) {
             do somting;
      }
      
       return 0;
}

通過ps aux | grep foo查看發(fā)現(xiàn)有三個進(jìn)程,應(yīng)該只有兩個才對阿,多出來的那個是怎么產(chǎn)生的呢?

論壇徽章:
0
2 [報告]
發(fā)表于 2008-07-22 11:08 |只看該作者
還有一個就是grep foo這個進(jìn)程

論壇徽章:
0
3 [報告]
發(fā)表于 2008-07-22 11:25 |只看該作者
Linux線程在底層跟進(jìn)程什一個概念.

論壇徽章:
0
4 [報告]
發(fā)表于 2008-07-22 11:59 |只看該作者
原帖由 scutan 于 2008-7-22 11:08 發(fā)表
還有一個就是grep foo這個進(jìn)程


當(dāng)然不包括grep foo了,ps aux | grep foo的結(jié)果是:
3116  root        648 S     /usr/local/bin/foo
3117  root        648 S     /usr/local/bin/foo
3118  root        648 S     /usr/local/bin/foo
3121  root        476 S     grep foo

論壇徽章:
0
5 [報告]
發(fā)表于 2008-07-22 13:16 |只看該作者
還有一個是用于 管理線程的線程,是linux不同GNU特有的,也跟線程庫的版本有關(guān).詳細(xì)情況可以找一些linux,線程發(fā)展史看一下.

[ 本帖最后由 wangsongnian828 于 2008-7-22 13:20 編輯 ]

論壇徽章:
0
6 [報告]
發(fā)表于 2008-07-22 14:09 |只看該作者
WINDOWS和Linux/UNIX的一個重要區(qū)別就是WINDOWS的執(zhí)行單元和LINUX不同.在WINDOWS中.進(jìn)程只是一個殼.線程是基本執(zhí)行單元.而LINUX則進(jìn)程就是基本執(zhí)行單元沒有線程一說.LINUX中的線程基本源自fork函數(shù).實際是一個新的進(jìn)程只是可以與原程序共享數(shù)據(jù).pthread也是對fork進(jìn)程的包裝(算是我的猜測吧.因為我在蘋果機(jī)上用pthread然后在蘋果下的任務(wù)管理器中看,它會顯示一個進(jìn)程包含了多個線程.呵呵.)

論壇徽章:
0
7 [報告]
發(fā)表于 2008-07-25 10:24 |只看該作者
LZ是在linux下創(chuàng)建的嗎?
對于在一個進(jìn)程中創(chuàng)建的多線程,貌似用ps是看不到線程的,雖然linux的多線程是用進(jìn)程實現(xiàn)的,如果
你調(diào)用fork創(chuàng)建子進(jìn)程的話,ps可以看到多個。
不過你可以在proc下看看到底有幾個線程,方法:
ps獲取當(dāng)前你的程序的PID
然后
  1. cat /proc/你進(jìn)程的ID/status | grep Threads
復(fù)制代碼
就能看到該程序創(chuàng)建線程的個數(shù)了。
下面是一個例子,ps看到的只有一個進(jìn)程。(我的系統(tǒng)是linux AS4 64位 kernel 2.6.9-11.ELsmp)
//duanjigang@2008-07-25

//thread_test.c

//build: gcc thread_test.c -o thread_test -lpthread

#include <pthread.h>
#include <stdio.h>
void * thread_func(void*);

int main(int argc, char* argv[])
{
&nbsp;&nbsp;&nbsp;&nbsp;pthread_t thread;
&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;interval = 1;
&nbsp;&nbsp;&nbsp;&nbsp;if(pthread_create(&thread, NULL, thread_func, 0) != 0)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("create tread fail\n");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;if(pthread_detach(thread) != 0)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("thread detach fail\n");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;while(1)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("I am the main thread\n");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(1);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;return 1; &nbsp;&nbsp;&nbsp;&nbsp;
}
void* thread_func(void* pData)
{
&nbsp;&nbsp;&nbsp;&nbsp;int interval = 0;
&nbsp;&nbsp;&nbsp;&nbsp;if(!pData)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;interval = 1;
&nbsp;&nbsp;&nbsp;&nbsp;}else
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;interval = *(int*)pData;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;if(interval <= 0)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;interval = 1;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;while(1)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("I am a thread function\n");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(interval);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;return 0;
}


[ 本帖最后由 duanjigang 于 2008-7-25 10:30 編輯 ]

論壇徽章:
95
程序設(shè)計版塊每日發(fā)帖之星
日期:2015-09-05 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-09-17 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-09-18 06:20:002015亞冠之阿爾艾因
日期:2015-09-18 10:35:08月度論壇發(fā)貼之星
日期:2015-09-30 22:25:002015亞冠之阿爾沙巴布
日期:2015-10-03 08:57:39程序設(shè)計版塊每日發(fā)帖之星
日期:2015-10-05 06:20:00每日論壇發(fā)貼之星
日期:2015-10-05 06:20:002015年亞冠紀(jì)念徽章
日期:2015-10-06 10:06:482015亞冠之塔什干棉農(nóng)
日期:2015-10-19 19:43:35程序設(shè)計版塊每日發(fā)帖之星
日期:2015-10-21 06:20:00每日論壇發(fā)貼之星
日期:2015-09-14 06:20:00
8 [報告]
發(fā)表于 2008-07-25 19:50 |只看該作者
原帖由 duanjigang 于 2008-7-25 10:24 發(fā)表
LZ是在linux下創(chuàng)建的嗎?
對于在一個進(jìn)程中創(chuàng)建的多線程,貌似用ps是看不到線程的,

用 ps 當(dāng)然可以看到線程,在 ps 的手冊中搜索一下 thread.

論壇徽章:
0
9 [報告]
發(fā)表于 2008-07-26 09:21 |只看該作者
原帖由 MMMIX 于 2008-7-25 19:50 發(fā)表

用 ps 當(dāng)然可以看到線程,在 ps 的手冊中搜索一下 thread.

哦,還不清楚這個,我一直都是看proc文件
不過LZ用ps aux 看到的不是線程吧

論壇徽章:
0
10 [報告]
發(fā)表于 2008-07-27 10:48 |只看該作者
線程和進(jìn)程實際上沒什么區(qū)別
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP