execlp() システムコール

execlp() システムコール

Cプログラムを介してulimitシェルコマンドを呼び出したいです。今私にいます:

execlp("ulimit", "ulimit", "-u", "%d", ulimit_a);

ulimit -aうまくコンパイルされますが、後で確認すると(ダッシュバージョンとbashバージョン)、ユーザーIDの最大プロセス値は実際には編集されません。同じことsystem()が発生しましたが、既知の問題のようです。system()

答え1

シェルulimitコマンドは、現在のシェルとその子孫にのみ適用されます。別のコマンドではなく、組み込みコマンドです。

ulimit別のシェルプロセスを起動して実行し、親プロセスに影響を与えるとは期待できません。

Cでは、現在のプロセスとそのサブプロセスのリソース制限を取得して設定するには、およびgetrlimit(2)関数を使用する必要があります。setrlimit(2)しかし、あなたがやっていることを見ると、彼らはそうはしません。あなた彼らもそうすることが期待されています。

答え2

pam_limitsユーザーセッションを作成するときにリソース制限を設定するプラグ可能な認証モジュール(PAM)モジュールを見てください。このモジュールを使用するにはPAMを設定する必要があります。その後、次の/etc/security/limits.d/ことを確認する必要があります。https://linux.die.net/man/8/pam_limitsより多くの情報を知りたいです。

関連情報