網路農夫 --  Home 網路農夫 --  Home
網路農夫 --  Home
wait.....

3-8-4 limit [ resource [max-use] ]、unlimit [resource] 指令

這兩個內建指令分別是用來設定(limit)或消除(unlimit)系統資源在使用上的限制,限定的系統資源與使用單位如下所示。

可設限的系統資源(resource)種類如下:

  • cputime 佔用的CPU執行時間
  • filesize 可使用的單一檔案的最大值
  • datasize 限制處理的資料上限,包含堆疊(stack)
  • stacksize 處理的堆疊大小
  • coredumpsize 核心資料轉存為檔案之上限
  • descriptors 檔案描述詞的上限
  • memoryuse 記憶體使用上限
  • 設限的最大使用值(max-use)單位如下:
    nh 單位:小時(僅用於cputime)
    nm 百萬位元(Megabytes)或單位:分(僅用於cputime)
    mm:ss 分:秒(僅用於cputime)
    nk 單位:千位元(kilobytes)此單位為基本設定值

首先我們可使用指令 limit 來顯示系統現在的設限情況。

3 % limit
cputime unlimited
filesize unlimited
datasize 524280 kbytes
stacksize 8192 kbytes
coredumpsize unlimited
memoryuse unlimited
descriptors 64

假設要設定 cputime limit 為 1 分鐘,鍵入指令如下:

4 % limit cputime 1

當執行指令使用 cputime 超過限制時,指令將自動被終結,並顯示出警告訊息。如下所示:

5 % find / -name Cshrc -print
Cputime limit exceeded

想要解除 cputime 限制,或者是要加以設定的話,可用 unlimit 指令來處理之。

6 % unlimit cputime

其它的各項設定方法均與此例相似。

 

對大部份的系統而言,最常設限的系統資源可能以 cputime 及 filesize 這兩者居多。通常是用以防止不明的或無法預期的錯誤處理程序佔用掉有限的系統資源,如硬碟空間或以秒計費的 CPU 時間(或許在今日這種環境的使用限制事實上已經不多了)。假定你對 cputime 設定限制為 60 秒,則大部份的處理程序如果執行的 cputime 超過 60 秒,執行會自動終止。但如果你要花費常時間去編輯一個檔案,碰上執行的 cputime 超過 60 秒的限制時,我敢保證你一定會哭出來(或“媽”出來)。所以,有預期這種情況會產生時,建議你先取消設定的 cputime 限制,再執行 vi 的編輯工作,下指令的方式可用下面的方法:

% unlimt cputime ; vi long_job ; limit cputime 60

如果你想一勞永逸地免除 vi 到一半被這種錯誤所終結的惡夢,你也可設定一個別名來代替 vi 指令,來免除像上面那種使用方法,建議的設定如下:

alias viul 'unlimit cputime ; /bin/vi \!:1 ; limit cputime 60'

 

版本:Beta-2001-05 -- 網路農夫