Linux:ulimit-c生成coreファイルを修正する


Linux:ulimit-c生成coreファイルを修正する
各プロセスには、現在のプロセスのforkに従って継承されるリソース制限のセットがあります.
shell自体にはリソース制限のセットがあり、あるshellの下で直接コマンドを実行すると、この新しいプロセスは一般的にshellのリソース制限を継承します.
今日の仕事で不確定なバグに遭遇しました.そのコードが崩壊するかどうかをテストするために、バグに実行し、coreファイルが出ているかどうかを確認します.
coreファイルが出ていませんが、ulimit-cが0に設定されていることがわかり、coreファイルが出ていません.
通常、ulimitを使用してshellのリソース制限を設定できます.
manマニュアルは次のように記述されています.
Provides  control  over the resources available to the shell and to processes started by it, on systems that allow such control.

まず、エラーのコードを見てみましょう.このコードはセグメントエラーを引き起こします.
#include 
#include 

int main()
{
    char *str = "hello, world!";
    str[0] = 0;
    return 0;
}

コンパイルおよび実行:
[test1280@localhost 20170623]$ !g
gcc -o main main.c
[test1280@localhost 20170623]$ ./main
   
[test1280@localhost 20170623]$ ll
   12
-rwxrwxr-x 1 test1280 test1280 6588 06-23 20:43 main
-rw-rw-r-- 1 test1280 test1280  109 06-23 20:32 main.c

はい、セグメントが間違っていますが、coreファイル==はありません.
現在のリソース制限を表示し、coreファイルサイズの設定を行います.
[test1280@localhost 20170623]$ ulimit -c
0

-cとは、生成を許可するcoreのサイズ、単位バイトを指す.
出力は0です.それは、coreファイルの生成が許可されていないことです.
How?
coreファイルサイズの制限を変更するには、次の手順に従います.
[test1280@localhost 20170623]$ ulimit -c unlimited
[test1280@localhost 20170623]$ ulimit -c
unlimited
[test1280@localhost 20170623]$ ./main
    (core dumped)
[test1280@localhost 20170623]$ ll
   100
-rw------- 1 test1280 test1280 172032 06-23 20:48 core.25599
-rwxrwxr-x 1 test1280 test1280   6588 06-23 20:43 main
-rw-rw-r-- 1 test1280 test1280    109 06-23 20:32 main.c

見えますか?
重要なポイントは次のとおりです.
ulimit -c unlimited

coreファイルサイズの設定は無限です.
もちろん、次のように使用できます.
ulimit -c 100

注意ここの100単位はKBです.
はい、coreファイルを生成する必要があることを覚えておいてください.まず、最大のcoreファイルがどれだけ大きいか(Maxディスクの占有スペース)を見て、0などの小さい場合は、大きく設定することができます.
PS:
小さな現象があります.
[test1280@localhost ~]$ unlimit -c
-bash: unlimit: command not found
[test1280@localhost ~]$ ulimit -c
0
[test1280@localhost ~]$ ulimit -c unlimited
[test1280@localhost ~]$ ulimit -c
unlimited
[test1280@localhost ~]$ ulimit -c 100
[test1280@localhost ~]$ ulimit -c
100
[test1280@localhost ~]$ ulimit -c unlimited
-bash: ulimit: core file size: cannot modify limit:       
[test1280@localhost ~]$ ulimit -c 50
[test1280@localhost ~]$ ulimit -c
50

次のことに気づきました.
shellログイン時に一般的に設定されるulimit-cは0です.
現在のshellでulimit-cを小さな値に変更した後(この値が100であると仮定)、後続のulimit-cで指定された値は、以前の小さな値よりも小さく(100よりも小さい)なければなりません...ただし、shellに再ログインすれば、unlimitedなどの再設定が可能になります.
ログイン時のprofileにulimit-c xxxを書き込んでもいいですか...そうですね、へへへ.