検索

ホームページ  >  に質問  >  本文

linux下execvp失败设置errno=7的原因是什么?

伊谢尔伦伊谢尔伦2787日前750

全員に返信(4)返信します

  • 迷茫

    迷茫2017-04-17 15:32:43

    ありがとうございます。
    しかし、回答者は誰も正解しませんでした。すべての情報を提供しなかったのは私のせいです。
    実際にはコード自体に問題はありませんが、その前にメモリ使用量を制限するセクション setrlimit があり、設定エラーによりメモリの上限が小さすぎるため、 argv の文字列は保存することさえできません。
    その間違いはばかげています。
    その間違いはばかげています。
    その間違いはばかげています。
    しかし、少なくとも argv が現在のプロセスのメモリを占有していないことはわかっています。 :P

    返事
    0
  • 高洛峰

    高洛峰2017-04-17 15:32:43

    以下のコードを見てください

    リーリー

    コンパイルして実行すると、出力は次のようになります

    リーリー

    execvpのパラメータがNULL

    で終わらないようにコードを変更します。 リーリー

    コンパイルして実行

    リーリー

    ご覧のとおり、現在の環境変数がここに出力されます。
    config->args が NULL で終わらず、環境変数がたくさんある場合、このようなことが起こりますか?


    コードを詳しく読んだわけではありません。execvp の呼び出し部分を簡単に見ただけです。
    execvp が成功したかどうかを判断せずに、raise 関数を直接呼び出しました。
    ただし、raise この関数は、実行中のプログラムにシグナルを送信するために使用されます。つまり、ここで execvp を呼び出している限り、事故なく SIGUSR1 シグナルが送信されます。
    errnoはグローバル変数なので、ここではexecvpで設定されるというわけではありません。

    返事
    0
  • PHPz

    PHPz2017-04-17 15:32:43

    ab をバックグラウンドに置きます。それでもエラーが発生する場合は、ab の実行エラーである可能性があります。

    返事
    0
  • ringa_lee

    ringa_lee2017-04-17 15:32:43

    config->args ポインター配列の最後の要素が NULL に設定されていないようです。

    execvp は、null ポインターに基づいてリストの終わりを決定します。

    例:

    リーリー

    返事
    0
  • キャンセル返事