迷茫2017-04-17 15:32:43
ありがとうございます。
しかし、回答者は誰も正解しませんでした。すべての情報を提供しなかったのは私のせいです。
実際にはコード自体に問題はありませんが、その前にメモリ使用量を制限するセクション setrlimit
があり、設定エラーによりメモリの上限が小さすぎるため、 argv
の文字列は保存することさえできません。
その間違いはばかげています。
その間違いはばかげています。
その間違いはばかげています。
しかし、少なくとも argv
が現在のプロセスのメモリを占有していないことはわかっています。 :P
高洛峰2017-04-17 15:32:43
以下のコードを見てください
リーリーコンパイルして実行すると、出力は次のようになります
リーリーexecvp
のパラメータがNULL
コンパイルして実行
リーリーご覧のとおり、現在の環境変数がここに出力されます。
config->args が NULL
で終わらず、環境変数がたくさんある場合、このようなことが起こりますか?
コードを詳しく読んだわけではありません。execvp
の呼び出し部分を簡単に見ただけです。 execvp
が成功したかどうかを判断せずに、raise
関数を直接呼び出しました。 ただし、raise
この関数は、実行中のプログラムにシグナルを送信するために使用されます。つまり、ここで execvp
を呼び出している限り、事故なく SIGUSR1
シグナルが送信されます。 errno
はグローバル変数なので、ここではexecvp
で設定されるというわけではありません。
ringa_lee2017-04-17 15:32:43
config->args
ポインター配列の最後の要素が NULL
に設定されていないようです。
execvp
は、null ポインターに基づいてリストの終わりを決定します。
例:
リーリー