目的:最近在shell終端中處理jason-2衛星高度計資料時,出現段錯誤。折騰良久,終於解決。記錄一下備忘。
解決辦法:shell終端中輸入ulimit -s unlimited
ulimit的相關用法(轉載):
ulimit命令用來限制系統用戶對shell資源的訪問。如果不懂什麼意思,下面一段內容可以幫助你理解:
假設有這樣一種情況,當一臺 Linux 主機上同時登陸了 10 個人,在系統資源無限制的情況下,這 10 個用戶同時打開了 500 個文檔,而假設每個文檔的大小有 10M,這時系統的內存資源就會受到巨大的挑戰。
而實際應用的環境要比這種假設複雜的多,例如在一個嵌入式開發環境中,各方面的資源都是非常緊缺的,對於開啓文件描述符的數量,分配堆棧的大 小,CPU 時間,虛擬內存大小,等等,都有非常嚴格的要求。資源的合理限制和分配,不僅僅是保證系統可用性的必要條件,也與系統上軟件運行的性能有着密不可分的聯 系。這時,ulimit 可以起到很大的作用,它是一種簡單並且有效的實現資源限制的方式。
ulimit 用於限制 shell 啓動進程所佔用的資源,支持以下各種類型的限制:所創建的內核文件的大小、進程數據塊的大小、Shell 進程創建文件的大小、內存鎖住的大小、常駐內存集的大小、打開文件描述符的數量、分配堆棧的最大大小、CPU 時間、單個用戶的最大線程數、Shell 進程所能使用的最大虛擬內存。同時,它支持硬資源和軟資源的限制。
作爲臨時限制,ulimit 可以作用於通過使用其命令登錄的 shell 會話,在會話終止時便結束限制,並不影響於其他 shell 會話。而對於長期的固定限制,ulimit 命令語句又可以被添加到由登錄 shell 讀取的文件中,作用於特定的 shell 用戶。
ulimit(選項)
選項
-a:顯示目前資源限制的設定; -c <core文件上限>:設定core文件的最大值,單位爲區塊; -d <數據節區大小>:程序數據節區的最大值,單位爲KB; -f <文件大小>:shell所能建立的最大文件,單位爲區塊; -H:設定資源的硬性限制,也就是管理員所設下的限制; -m <內存大小>:指定可使用內存的上限,單位爲KB; -n <文件數目>:指定同一時間最多可開啓的文件數; -p <緩衝區大小>:指定管道緩衝區的大小,單位512字節; -s <堆疊大小>:指定堆疊的上限,單位爲KB; -S:設定資源的彈性限制; -t <CPU時間>:指定CPU使用時間的上限,單位爲秒; -u <程序數目>:用戶最多可開啓的程序數目; -v <虛擬內存大小>:指定可使用的虛擬內存上限,單位爲KB。
實例
[root@localhost ~]# ulimit -a core file size (blocks, -c) 0 #core文件的最大值爲100 blocks。 data seg size (kbytes, -d) unlimited #進程的數據段可以任意大。 scheduling priority (-e) 0 file size (blocks, -f) unlimited #文件可以任意大。 pending signals (-i) 98304 #最多有98304個待處理的信號。 max locked memory (kbytes, -l) 32 #一個任務鎖住的物理內存的最大值爲32KB。 max memory size (kbytes, -m) unlimited #一個任務的常駐物理內存的最大值。 open files (-n) 1024 #一個任務最多可以同時打開1024的文件。 pipe size (512 bytes, -p) 8 #管道的最大空間爲4096字節。 POSIX message queues (bytes, -q) 819200 #POSIX的消息隊列的最大值爲819200字節。 real-time priority (-r) 0 stack size (kbytes, -s) 10240 #進程的棧的最大值爲10240字節。 cpu time (seconds, -t) unlimited #進程使用的CPU時間。 max user processes (-u) 98304 #當前用戶同時打開的進程(包括線程)的最大個數爲98304。 virtual memory (kbytes, -v) unlimited #沒有限制進程的最大地址空間。 file locks (-x) unlimited #所能鎖住的文件的最大個數沒有限制。
參考資料