• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Onway

            我是一只菜菜菜菜鳥(niǎo)...
            posts - 61, comments - 56, trackbacks - 0, articles - 34

            Linux進(jìn)程資源在fork和execve前后的變化

            Posted on 2013-05-10 20:21 Onway 閱讀(2550) 評(píng)論(2)  編輯 收藏 引用 所屬分類(lèi): 碼兒快跑
            使用getrusage得到的資源統(tǒng)計(jì)的類(lèi)型較多,測(cè)試代碼是僅針對(duì)ru_utime, ru_stime, ru_minflt三種類(lèi)型的資源。
            測(cè)試環(huán)境:Linux kubuntu 3.2.0-38-generic-pae #61-Ubuntu SMP Tue Feb 19 12:39:51 UTC 2013 i686 i686 i386 GNU/Linux
            結(jié)論:父進(jìn)程fork得到的子進(jìn)程的資源使用被重置,子進(jìn)程使用execve之后的資源使用不變。
            parent.c:
            #include <stdio.h>
            #include <stdlib.h>
            #include <unistd.h>
            #include <sys/time.h>
            #include <sys/resource.h>

            void
            print_rusage(const char * where)
            {
                struct rusage used;
                getrusage(RUSAGE_SELF, &used);

                printf("In %s:\n", where);
                printf("user cpu time: %ld(ms)\n",
                        used.ru_utime.tv_sec * 1000 + used.ru_utime.tv_usec / 1000);
                printf("sys cpu time: %ld(ms)\n",
                        used.ru_stime.tv_sec * 1000 + used.ru_stime.tv_usec / 1000);
                printf("soft page faults: %ld\n", used.ru_minflt);
                printf("\n");
            }

            void
            consume_rusage()
            {
                int i, j, k;
                char * s = NULL;

                /* about 3 seconds user cpu time */
                for (i = 0; i < 1000; ++i)
                    for (j = 0; j < 1000; ++j)
                        for (k = 0; k < 1000; ++k)
                            i / (j + 1) * k;
                
                /* 1000 soft page faults */
                k = 4096 * 1000;
                s = (char *)malloc(k);
                for (i = 0; i < k; ++i)
                    s[i] = 'a';
            }

            int
            main(int argc, char *argv[])
            {
                consume_rusage();
                print_rusage("parent process");

                if (fork() == 0) {
                    print_rusage("child process, after fork");
                    printf("consuming resource \n\n");
                    consume_rusage();
                    print_rusage("child process, before execve");
                    printf("excl child program now \n\n");
                    execl("./child", "./child", (void *)0);
                }

                wait(NULL);
                return 0;
            }

            child.c:
            #include <stdio.h>
            #include <sys/time.h>
            #include <sys/resource.h>

            void
            print_rusage(const char * where)
            {
                struct rusage used;
                getrusage(RUSAGE_SELF, &used);

                printf("In %s:\n", where);
                printf("user cpu time: %ld(ms)\n",
                        used.ru_utime.tv_sec * 1000 + used.ru_utime.tv_usec / 1000);
                printf("sys cpu time: %ld(ms)\n",
                        used.ru_stime.tv_sec * 1000 + used.ru_stime.tv_usec / 1000);
                printf("soft page faults: %ld\n", used.ru_minflt);
                printf("\n");
            }

            int
            main(int argc, char *argv[])
            {
                print_rusage("child program");
                return 0;
            }   

            好久沒(méi)寫(xiě)博客了,密碼都快忘記了。寫(xiě)給自己的記憶。

            Feedback

            # re: Linux進(jìn)程資源在fork和execve前后的變化  回復(fù)  更多評(píng)論   

            2013-05-23 16:15 by lugesot
            您好,能否簡(jiǎn)單解釋下soft page faults?
            child.c 運(yùn)行本身不耗什么資源,所有,它還有說(shuō)服力嗎?謝謝

            # re: Linux進(jìn)程資源在fork和execve前后的變化  回復(fù)  更多評(píng)論   

            2013-06-05 12:10 by Onway
            @lugesot
            soft page faults,我的理解是內(nèi)存缺頁(yè)次數(shù),即需要從虛擬內(nèi)存載入到實(shí)際內(nèi)存的頁(yè)數(shù)。
            正是由于child.c本身不耗費(fèi)什么資源,而其資源使用輸出卻很大,這說(shuō)明了子進(jìn)程在fork之后的資源使用會(huì)被execve繼承。
            好属妞这里只有精品久久| 色婷婷久久久SWAG精品| 久久精品国产亚洲av麻豆小说| 亚洲精品白浆高清久久久久久 | 久久国产亚洲精品无码| 久久久久久久尹人综合网亚洲| Xx性欧美肥妇精品久久久久久| 久久久99精品成人片中文字幕 | 久久久精品人妻一区二区三区蜜桃 | 青青草原精品99久久精品66| 99国内精品久久久久久久 | 久久精品这里热有精品| 亚洲欧美日韩久久精品| 国产情侣久久久久aⅴ免费| 性做久久久久久免费观看| 久久精品欧美日韩精品| 老男人久久青草av高清| 国内精品久久久久久久久电影网| 伊人久久大香线蕉av不卡| 久久高清一级毛片| 久久国产精品久久| 久久99热只有频精品8| 亚洲一区精品伊人久久伊人| 久久九九青青国产精品| 久久亚洲AV成人出白浆无码国产| 国产亚洲精久久久久久无码AV| 成人国内精品久久久久影院| 一本久久a久久精品亚洲| 久久久亚洲精品蜜桃臀| 久久AAAA片一区二区| 久久久久夜夜夜精品国产| 国内精品久久国产大陆| 国产精品久久久亚洲| 国产人久久人人人人爽| 久久国产乱子伦免费精品| 亚洲精品无码久久久影院相关影片| 欧美一级久久久久久久大片| 亚洲国产成人久久精品99 | 久久久无码精品亚洲日韩蜜臀浪潮| 久久精品视屏| 欧美性大战久久久久久|