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より多くの情報を知りたいです。