我可以以某种方式暂停在后台登录的用户的所有进程吗?

Byt*_*der 3 cpu-load lock-screen login users process

我的 14.10 笔记本电脑上主要有两个帐户:我的(管理员)和我兄弟的(受限)。

现在当我的兄弟登录并运行一些应用程序时,例如带有flash player的firefox,它消耗大量CPU。我有一个 Intel 2GHz,2 个内核,但由于显卡半损坏而使用软件渲染。
当他现在锁定他的帐户而我登录我的帐户时,即使我什么都不做,CPU 也处于 80% 左右。indicator-multiload我认为,将其他用户的 firefox 和 compiz 显示为消耗最多的进程,有时也是 xorg。

简而言之:我可以运行命令/脚本来暂停其他用户启动的进程并在我完成工作后再次恢复它们吗?如果可以在每次锁定/登录/注销时执行,那就太好了。

但这对所有应用程序都是安全的吗?我需要注意哪里?

mur*_*uru 6

一种方法是将SIGSTOP信号发送到您兄弟的所有进程:

sudo pkill -STOP -u brother
Run Code Online (Sandbox Code Playgroud)

要唤醒已停止的进程,请使用以下SIGCONT信号:

sudo pkill -CONT -u brother
Run Code Online (Sandbox Code Playgroud)

您可以使用 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
Run Code Online (Sandbox Code Playgroud)

以及一个~/.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
Run Code Online (Sandbox Code Playgroud)

您还需要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
Run Code Online (Sandbox Code Playgroud)

现在,当您登录、注销、锁定或解锁屏幕时,信号应该会自动发送。您可以使用以下任一方法手动启动:

start stop-brother
start start-brother
Run Code Online (Sandbox Code Playgroud)