• <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>

               C++ 技術中心

               :: 首頁 :: 聯系 ::  :: 管理
              160 Posts :: 0 Stories :: 87 Comments :: 0 Trackbacks

            公告

            鄭重聲明:本BLOG所發表的原創文章,作者保留一切權利。必須經過作者本人同意后方可轉載,并注名作者(天空)和出處(CppBlog.com)。作者Email:coder@luckcoder.com

            留言簿(27)

            搜索

            •  

            最新隨筆

            最新評論

            評論排行榜

            這一部分的提出是為了防止失控的進程破壞系統的性能

            nuix和Linux跟蹤進程使用的大部分資源,允許用戶和系統管理員使用對進程的資源限制

             設置的限制有兩種: 硬限制和軟限制

            硬限制是可以在任何時候任何進程中設置  但硬限制只能由超級用戶提起

            軟限制是內核實際執行的限制,任何進程都可以將軟限制設置為任意小于等于對進程限制的硬限制的值


            ———————以下內容為轉載(突然發現這方面有好資源便直接引用了)—————————

            getrlimit和setrlimit函數
              每個進程都有一組資源限制,其中某一些可以用getrlimit和setrlimit函數查詢和更改。

            #include
            #include
            int getrlimit(int resource,struct rlimit *rlptr);
            int setrlimit(int resource,const struct rlimit rlptr);
            Both return: 0 if OK,nonzero on error兩個函數

              返回:若成功為0,出錯為非0

              對這兩個函數的每一次調用都指定一個資源以及一個指向下列結構的指針。

            struct rlimit{
            rlim rlim rlimit_ur;/* 軟限制:當前限制 */
            rlim rlim rlim_ax;/* 硬限制:rlimcur的最大值 */
            };

            可用的值

            RLIMIT _AS                進程可用的內存的最大數量,包括堆棧、全局變量、動態內存

            RLIMIT _CORE           內核生成的core文件的最大大小

            RLIMIT _CPU             所用的全部cpu時間 以秒計算

            RLIMIT _DATA           數據存儲的最大容量,以字節計算,不包括程序分配的動態存儲空間

            RLIMIT _FSIZE          打開文件的最大數目

            RLIMIT _MEMLOCK  

            RLIMIT _NOFILE      

            RLIMIT _NPROC       進程可以產生的最大子進程數量

            RLIMIT _RSS            可以隨時使用的內存最大容量

            RLIMIT _STACK        堆棧存儲區的最大容量


              這兩個函數不屬于POSIX.1,但SVR4和4.3+BSD提供它們。SVR4在上面的結構中使用基本系統數據類型rlim。其它系統則將這

            兩個成員定義為整型或長整型。

              進程的資源限制通常是在系統初啟時由0#進程建立的,然后由后續進程繼承。在SVR4中,系統默認值可以查看文

            件/etc/conf/cfd/mtune在4.3+BSD中,系統默認值分散在多個頭文件中。

              在更改資源限制時,須遵循下列三條規則:

              1.任何一個進程都可將一個軟限制更改為小于或等于其硬限制。
              2.任何一個進程都可降低其硬限制值,但它必須大于或等于其軟限制值。這種降低,對普通用戶而言是不可逆反的。
              3.只有超級用戶可以提高硬限制。

              一個無限量的限制由常數RLIM NFINITY指定。

              這兩個函數的resource參數取下列值之一。注意并非所有資源限制都受到SVR4和4.3+BSD的支持。

              RLMITCORE(SVR4及4.3+BSD)core文件的最大字節數,若其值為0則阻止創建core文件。
              RLIMIT PU(SVR4及4.3+BSD)CPU時間的最大量值(秒),當超過此軟限止時,向該進程發送SIGXCPU信號。
              RLIMIT ATA(SVR4及4.3+BSD)數據段的最大字節長度。這是圖7.3中初始化數據、非初始化數據以及堆的總和。
              RLIMIT SIZE(SVR4及4.3+BSD)可以創建的一個文件的最大字節長度。當超過此軟限制時,則向該進程發送SIGFSZ信號。
              RLIMIT EMLOCK(4.3+BSD)鎖定在存儲器地址空間(尚末實現)。
              RLIMIT OFILE(SVR4)每個進程最多打開的文件數。更改此限制將影響到sysconf函數在參數-sc-OPEN-MAX中返回的值(2.5.4節

            )。見程序2.3。
              RLIMIT PROC(4.3+BSD)每個實際用戶ID所擁有的最大子進程數。更改此限制將影響到sysconf函數在參數 CHILDMAX中返回的

            值(2.5.4節)。
              RLIMIT FILE(4.3+BSD)與SVR4的RLIMIT OFILE相同。
              RLIMIT SS(4.3+BSD)最大駐內存集字節長度(RSS)。如果物理存儲器供子應求,則系統核將從進程處取回超過RSS的部分。
              RLIMIT TACK(SVR4及4.3+BSD)棧的最大字節長度。見圖7.3。
              RLIMIT MEM(SVR4)可映照地址空間的最大字節長度。這影響到mmap函數(12.9節)。

              資源限制影響到調用進程并由其子進程繼承。這就意味著為了影響一個用戶的所有后續進程,需將資源限制設置構造在shell

            之中。確實,Bourne Shell和Kornshell具有內部ulimit命令,CShell具有內部limit命令。(umask和chdir也必須是shell內部的)

              較早的BourmeShell,例如由貝克萊提供的一種,不支持ulimit命令。較新的KornShell的ulimit命令具有-H和-s選擇項,以

            分別檢查和修改硬和軟的限制,但它們尚末編寫入文檔。

            ?

            ?簡單的用例:

            #include<sys/time.h>
            #include<sys/resource.h>
            #include<unistd.h>
            int main()
            {
              struct rlimit limit;
             char p = '1';
             limit.rlim_cur = RLIM_INFINITY;
             limit.rlim_max = RLIM_INFINITY;
             if(setrlimit(RLIMIT_CORE, &limit))
             {
              printf("set limit failed/n");
             }

             printf("p = %s/n",p);
            }



            ---------------------------------------------------------------------------------------------------------------------------------------------

            對每個進程都有一組資源限制,其中一些可以用getrlimit和setrlimit函數查詢和更改

            getrlimit和setrlimit:資源限制 (getrlimit and setrlimit: Resource Limits)

            這兩個系統函數是和resource limit相關的。你用過ulimit命令嗎?(反正我沒用過)
            對于每個資源來說有兩個limit:一個是hard limit,一個是soft limit,其中后者永遠不能超過前者,并且只有擁有superuser權限的進程可以更改前者。
            getrlimit和setrlimit的參數相同:第一個參數是資源的類型,第二個參數是rlimit結構的指針,這個結構里面就只有兩個成員:hard limit和soft limit
            幾個重要的資源類型
            RLIMIT_CPU:程序執行的最大CPU時間,單位是秒。超過之后程序中止,中止的信號是SIGXCPU
            RLIMIT_DATA:程序執行的最大內存
            RLIMIT_NPROC:程序孵出的最大子進程數量
            RLIMIT_NOFILE:程序打開的文件的最大數量


            --------------------
            如果你碰到類似的錯誤提示
            ulimit: max user processes: cannot modify limit: 不允許的操作
            ulimit: open files: cannot modify limit: 不允許的操作

            為啥root用戶是可以的?普通用戶又會遇到這樣的問題?
            看一下/etc/security/limits.conf大概就會明白。
            linux對用戶有默認的ulimit限制,而這個文件可以配置用戶的硬配置和軟配置,硬配置是個上限。
            超出上限的修改就會出“不允許的操作”這樣的錯誤。

            在limits.conf加上
            * soft noproc 10240
            * hard noproc 10240
            * soft nofile 10240
            * hard nofile 10240
            就是限制了任意用戶的最大線程數和文件數為10240。

            posted on 2012-03-19 08:57 C++技術中心 閱讀(4096) 評論(0)  編輯 收藏 引用 所屬分類: Linux 操作
            久久久久久精品成人免费图片 | 51久久夜色精品国产| 伊人色综合久久| 日韩中文久久| 国产精品久久毛片完整版| 狠狠人妻久久久久久综合蜜桃| 亚洲国产成人久久综合野外| 亚洲精品午夜国产VA久久成人| 国产精品激情综合久久| 久久强奷乱码老熟女网站| 51久久夜色精品国产| 中文字幕无码精品亚洲资源网久久| www性久久久com| 亚洲色婷婷综合久久| 国产综合免费精品久久久| 婷婷五月深深久久精品| 久久久精品视频免费观看| 99久久精品国产麻豆| 久久久精品人妻一区二区三区蜜桃| 久久777国产线看观看精品| 亚洲精品99久久久久中文字幕| 久久亚洲精品视频| 伊人久久久AV老熟妇色| 思思久久好好热精品国产| 日韩一区二区久久久久久 | 久久久精品视频免费观看| 久久精品aⅴ无码中文字字幕重口| 久久人妻少妇嫩草AV蜜桃| 亚洲国产精品热久久| 国产韩国精品一区二区三区久久| 99久久精品免费看国产一区二区三区 | 久久久精品国产Sm最大网站| 亚洲国产精品久久久久婷婷老年| 蜜臀久久99精品久久久久久小说 | 久久国产精品国产自线拍免费| 久久婷婷五月综合国产尤物app| 久久国产欧美日韩精品| 久久久噜噜噜久久中文字幕色伊伊| 久久免费大片| 国内精品伊人久久久影院| 一本久久综合亚洲鲁鲁五月天|