特定のパスにあるバイナリが常に特定のcgroupの一部として実行されるようにしたいと思います。これまで私が見つけたすべては、特別なコマンドでバイナリを実行することに関連しています。(例:ANDsystemd-run
またはAND cgexec
)。バイナリを呼び出すすべての可能な方法を見つけることは、正確に私が望むものではありません。(ターミナルを介して、DE実行パネルを介して、自動起動を介して...)これを修正するのは難しい作業です。
どういうわけかAppArmorまたはSELinuxをcgroupと組み合わせる必要があると思いますが、これを行う方法の説明が見つかりません。
背景:ワークラップトップで時々スワップストームが発生することがあります。私は危険を冒してシステムを調整しようとしました。次のような「スワップ防衛」ブログ記事 私はいくつかの実験を行った結果、少なくともzswapと私のワークフローではHDDでもvm.swappiness = 100
lowよりも優れていることがわかりました。vm.swappiness = 10
しばらく使ってから変なところが見つかりました。朝1回だけ使用し、残りの時間にバックグラウンドでアイドル状態に座っていたSkypeプロセスは、ゼロで2回のスワップストームを正常に通過しました。(ヤング!)SWAPのキロバイト。 3番目の交換嵐でのみ、Skypeは少し利益を得ました。(PSSなど他のプロセスと比較)6つのプロセスをそれぞれSWAPに入れます。これは驚くべき行動であり、私が好きではない行動です。私はSkypeが97%の時間を「オンライン」状態でのみ使用しているので、リサイクルの最初の犠牲者の1つになることを願っています。
同時に、i3やPlasmaなどの他の重要なプロセスによるリサイクルの可能性を減らしたいと思いました。
cgroupsは、この記事で述べたようmemory
なさまざまなフックを提供します。memory.low
だから、システムのさまざまなプロセスを調整するために使用したいと思います。しかし、バイナリが端末で実行されているのか、runで実行されているのか、rofi
それとも別の方法で実行されているのかに関係なく動作することを確認したいと思います。
ハッカーとして、私は元の実行可能ファイルを実行して、興味のあるバイナリをラッパースクリプトに置き換えることができますsystemd-run
。しかし、次のアップデートでは上書きされます。これは明らかにハッキングです。
答え1
AppArmorとSELinuxはどちらもLSMモジュールです。彼らはcgroupについて知らない。この目的には使用できません。
IMHO、ラッパーメソッドを使用するのが最善です。
ラッパーを~/bin
ディレクトリに配置し、そのディレクトリをPATH
環境変数に最初に置くことができます。その後、ラッパーでバイナリのフルファイルパスを使用することで、無限ループを回避できます。これにより、相対バイナリ名を使用し、それに続くすべてのツールがラッパーをPATH
実行します。ただし、.desktop
これはラッパーを使用するためにファイルを調整する必要があるかもしれません。ラッパーはしばしば実行可能ファイルのフルファイルパスを使用するためです。
ラッパーを本当に避けたい場合は、実行中のプロセスを監視し、基準に一致するプロセスをターゲットcgroupに移動するスクリプトを作成する必要があります。私はこのアプローチがラッパーアプローチよりもハッキング的だと思います。