web-dev-qa-db-ja.com

バックグラウンドでログインしているユーザーのすべてのプロセスを何らかの形で一時停止できますか?

14.10ラップトップには主に2つのアカウントがあります:私(管理者)と私の兄弟(制限付き)です。

私の兄弟がログインして、firefoxでfirefoxなどのアプリケーションを実行すると、CPUを大量に消費します。 Intel 2GHz、2コアを持っていますが、グラフィックカードが壊れているため、ソフトウェアレンダリングを使用しています。
彼がアカウントをロックし、私がログインすると、何もしなくてもCPUは約80%になります。 indicator-multiloadは、他のユーザーのfirefoxとcompizを、最も消費の多いプロセス、場合によってはxorgとして示しています。

簡単に言うと、コマンド/スクリプトを実行して、別のユーザーが開始したプロセスを一時停止し、作業を完了した後に再開することはできますか?すべてのロック/ログイン/ログアウトで実行できればいいでしょう。

しかし、これはすべてのアプリケーションにとって安全ですか?どこに注意を払う必要がありますか?

3
Byte Commander

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

NOPASSWDsudoersエントリも必要です:

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
6
muru

どのアプリケーションがより高いリソースを使用しているかを確認します。

コマンドを使用して、そのアプリケーションのPIDを見つけます

pidof "application name"引用符なし。

 Sudo kill -STOP "ID of the process"

その後、作業が完了したら、以下のコマンドを使用して、停止したプロセスを開始します。

Sudo kill -CONT "PID that you have killed earlier"

試してみる!

2
Jaison V John
1
PKumar