“单例”应用程序——或者让用户一次只启动一个程序实例

“单例”应用程序——或者让用户一次只启动一个程序实例

我正在运行一些 Linux 桌面;主要针对儿童(是的,试图在早期教会他们正确的操作系统)(运行 Ubuntu 10.10、Gnome)

问题是,他们发现通过启动数千个 Firefox 实例来制作他们的工作站(实际上是旧的 512 Mb 奔腾 4)非常有趣。

我正在寻找一种方法来限制它们启动特定应用程序的“N”个实例。还没有想出如何做。想到了一个监控守护进程,但我认为这会消耗太多资源。

有什么脚本/技巧可以实现这一点吗?

注意:我可能有 1-2 个级别的用户(孩子和成年的孩子),所以我还必须限制每个用户;例如用户 1:3firefox,用户 2:2firefox 实例。

答案1

您的问题似乎是可以启动的程序太多,而不是某个应用程序太多。为此,您可能需要研究更好的进程限制/节流,这样它们就不会以这种方式导致机器崩溃。

至于使用特定应用程序进行预防:在与孩子打交道时,我会考虑制作快捷方式,如果已经打开了一个应用程序,则打开当前正在运行的应用程序实例,如果没有,则打开另一个。或者,如果已经有一个正在运行的实例,则根本不起作用。

您可以创建使用命令行命令的快捷方式,而不是当前正在执行的操作。如果已经有一个实例正在运行,我无法推荐一种无法正常工作的特定命令语法,但这就是我开始寻找的地方。

答案2

考虑在您的limits.conf文件中添加一些进程数限制,通常位于/etc/security/limits.conf

以下代码片段将限制该users组的成员为 200 个进程:

@users          hard    nproc   200

这不会让您限制使用任何特定应用程序的用户数量,但它在很大程度上可以保护机器的其余部分免受少数恶意用户的攻击。

您可能还想考虑使用地址空间限制而不是严格的进程数限制。

下面将施加 512000KB (500MB) 的硬限制:

@users          hard    as      512000

答案3

具体来说,对于 Firefox,问题的一部分在于,无论您对快捷方式做什么,孩子都可以通过按 ctrl-N 来获得数十个 Firefox 窗口。此外,据我所知(Debian 稳定版的 iceweasel),当您尝试运行没有-no-remote命令行选项的第二个 Firefox 副本时,它会向现有的 Firefox 发送一条消息以打开一个新窗口,然后退出,因此通常只有一个 Firefox 进程(每个用户)。您可以尝试这个窗口限制器插件,这可能会对您有所帮助,因为您正在将其用于其预期目的,而不是像愤怒的评论者那样试图阻止弹出窗口。

对于其他应用程序,大多数 Dock 都会在 Dock 本身内捕获应用程序图标,再次单击 Dock 中的应用程序会返回到现有窗口(请参阅 OSX 或 Windows 7 对固定在任务栏上的应用程序的操作)。大多数 Dock 仍可以在右键单击时打开应用程序的多个副本,但这可能会让一些小孩子困惑一段时间。您只需找到一个带有应用程序启动器的 Dock,它以这种方式工作并与 Gnome 配合使用,这可能需要一些反复试验。

相关内容