【问题标题】:Automatically suspend process自动挂起进程
【发布时间】:2020-02-18 21:37:26
【问题描述】:

我看到 Windows/Linux 具有暂停进程的能力。 为什么后台应用程序不会自动挂起,这对我来说是有线的。

例如,Chrome 在后台使用大量资源。它可以很容易地被暂停。所以它会留在 RAM 中,可以快速解除挂起,但不会使用 CPU 和 GPU。

我的问题包含两个部分:

  1. 为什么 Windows/Linux(或应用程序)不使用挂起功能? (类似于 Android 中的暂停,但方式不同)
  2. 是否有任何方法可以暂停后台任务并在它获得焦点时取消暂停(当它转到前台时)?

【问题讨论】:

  • 1.拥有一个允许程序继续在后台运行的操作系统非常有用。还有其他管理资源使用的方法,但这种管理应该是可配置的,而不是在所有情况下都强制执行。 2. 在 Linux 中,SIGSTOPSIGCONT 信号可用于暂停和重新启动进程。
  • 问题 1 没有意义。 Windows确实挂起 UWP 应用程序。这需要基础设施和应用程序的协作,而这在几十年前开发 Windows 时是不可用的,因此系统依赖桌面应用程序来做正确的事情。
  • @kaylum 是的,我知道有 sigstop 和 sigcont 信号,但我的意思是像 android 系统(不完全相同),它会自动暂停后台应用程序并在它处于前台时恢复。
  • @llnspectable 我在最后的评论中解释了更多。我的意思是即使是新的 Microsoft Edge 也不使用挂起功能。这意味着这个功能是没用的。但是我的第二个问题是关于第三方应用程序,它能够在应用程序返回前台时取消暂停
  • 恕我直言,您似乎不了解程序如何运行,或者它们为何以及何时消耗资源。一个桌面应用程序,它在后台并且不做任何事情(比如记事本),根本不执行任何代码。它只是坐在那里,等待消息到达GetMessage。发生这种情况时,线程调度程序唤醒线程,以便它可以分派消息。此外,应用程序不会“停留在 RAM 中”。虚拟内存已经存在了几十年(这是复数)。 RAM 是一种性能优化。

标签: linux windows performance suspend


【解决方案1】:

像 Chrome 这样的进程可能在用户界面上没有输入焦点,但仍处于“运行”状态。 (Chrome 由一组相关的进程和线程组成。)

是的,Linux确实能够使用STOP/CONT 信号实际“挂起”进程,但这会对用户界面造成破坏,因为 Chrome 现在是字面意思 已冻结,无法再响应用户界面发送给它的消息。

进程和线程仅在实际需要时消耗 CPU 资源(它们是“可运行的”),并且仅在操作系统为它们提供时间片时才消耗。例如,如果一个线程或进程正在“等待用户界面向其发送消息”,则在消息到达之前,它不会被视为“可运行”。

这也是典型的,当一个进程没有输入焦点时,它的优先级会略微降低,以便它总是让位于有输入焦点的进程。在某些系统中,当您最小化窗口时,优先级会进一步降低。 (当多个进程“可运行”时,操作系统使用“优先级”来帮助它决定下一个运行哪一个。)

【讨论】:

  • 我知道有挂起功能,但应用程序不使用它,这意味着它没用。我看到 chrome 和 vscode 总是消耗我的 cpu 和 gpu 但它们真的没有被使用。它们完全在后台,所以虽然这些应用程序写得不好,但我希望操作系统在它们在后台时暂停它们(比如 android os 中的暂停功能)
  • 目前windows正在windows 11中使用这个功能,很糟糕它不会自动取消暂停进程它只是暂停进程
猜你喜欢
  • 1970-01-01
  • 2011-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
  • 2017-02-28
相关资源
最近更新 更多