2

ここで状況が発生します。数日前、ターゲット ボードにコア ダンプ ファイルが表示されました。/etc/profile に「ulimit -c unlimited」を追加して、コアダンプ生成サポートを提供しました。しかし、誰かが私に言いました。

これは、systemd によって開始されたプロセス/サービスではなく、ログイン シェルから起動されたプログラムにのみ影響します。etc/limits は、これらのデフォルトを設定するための適切な場所です。

そこで、/etc/limits ファイルを変更し、「ulimit -c unlimited」行を追加しましたが、コアダンプ ファイルが表示されなくなりました。

kill -9 $$ を実行してセグメンテーション違反を生成すると、以前と同様にコアダンプ ファイルが生成されます。

「/proc/sys/kernel/core_pattern」ファイルを変更して、ulimit -c unlimited を明示的に実行しようとしましたが、うまくいきません

どこが間違っているのでしょうか??

4

4 に答える 4

2

コア ファイルを作成できるようにするには、最初にユーザー制限設定を有効にする必要があります。

ulimit -c unlimited

アプリケーション ユーザーは、同じセッションでアプリケーションを開始する前に実行する必要があります。この設定はアプリケーションによって継承されるため、アプリケーションを開始する前に ulimit が設定されていれば、それがアプリケーションの ulimit 設定になります (開始スクリプトによって変更されない限り)。

于 2015-07-18T06:48:49.010 に答える
0

他の回答に加えて、gcore(1)を使用して、実行中のプロセスのコアダンプを生成することもできます。

しかし、kill(1)コマンド (または、その下にあるkill(2)システムコール、たとえばアドホック プログラムから) を使用する場合は、( abort(3)がブロック解除後に自身に送信するSIGABRTシグナル) を使用することをお勧めします。シグナル(7)

注意してください。通常、プログラムはコア ダンプを禁止できます。たとえば、setrlimit(2)RLIMIT_CORE0 に設定して呼び出すか、いくつかのシグナルを処理または無視します ( sigaction(2) ... などを使用)。

于 2015-07-18T06:54:08.020 に答える