14.10ラップトップには主に2つのアカウントがあります:私(管理者)と私の兄弟(制限付き)です。
私の兄弟がログインして、firefoxでfirefoxなどのアプリケーションを実行すると、CPUを大量に消費します。 Intel 2GHz、2コアを持っていますが、グラフィックカードが壊れているため、ソフトウェアレンダリングを使用しています。
彼がアカウントをロックし、私がログインすると、何もしなくてもCPUは約80%になります。 indicator-multiload
は、他のユーザーのfirefoxとcompizを、最も消費の多いプロセス、場合によってはxorgとして示しています。
簡単に言うと、コマンド/スクリプトを実行して、別のユーザーが開始したプロセスを一時停止し、作業を完了した後に再開することはできますか?すべてのロック/ログイン/ログアウトで実行できればいいでしょう。
しかし、これはすべてのアプリケーションにとって安全ですか?どこに注意を払う必要がありますか?
1つの方法は、SIGSTOP
シグナルを兄弟のすべてのプロセスに送信することです。
Sudo pkill -STOP -u brother
停止したプロセスを起こすには、SIGCONT
信号が使用されます:
Sudo pkill -CONT -u brother
ログインまたはログアウトしたとき、または画面をロックまたはロック解除したときに実行されるUpstartセッションジョブを使用できます。たとえば、.conf
ファイル~/.config/upstart
(いう ~/.config/upstart/stop-brother.conf
)含む:
description "Stop all my brother's processes"
start on desktop-start or desktop-unlock
task
exec Sudo pkill -STOP -u brother
そして、逆ファイル(たとえば~/.config/upstart/start-brother.conf
)含む:
description "Resume all my brother's processes"
start on desktop-end or desktop-lock
task
exec Sudo pkill -CONT -u brother
NOPASSWD
にsudoers
エントリも必要です:
Sudo tee /etc/sudoers.d/stop-brother <<EOF
$USER ALL = (ALL) /usr/bin/pkill -STOP -u brother, /usr/bin/pkill -CONT -u brother
EOF
これで、画面のログイン、ログアウト、ロック、ロック解除時に信号が自動的に送信されます。次のいずれかを使用して、手動で開始できます。
start stop-brother
start start-brother
どのアプリケーションがより高いリソースを使用しているかを確認します。
コマンドを使用して、そのアプリケーションのPIDを見つけます
pidof "application name"
引用符なし。
Sudo kill -STOP "ID of the process"
その後、作業が完了したら、以下のコマンドを使用して、停止したプロセスを開始します。
Sudo kill -CONT "PID that you have killed earlier"
試してみる!
これを確認してください CRIUを使用したLinuxプロセスの保存と復元