更好:如果计算机是 unidle,我怎么能完全暂停一个要求很高的过程?

gue*_*tli 3 performance command-line process idle nice

我的 PC 上的一些后台作业执行繁重的处理。以最高水平运行它们仍然会产生缓慢的交互性并使我烦恼。

有没有比最大好更好的方法?

只要我使用 PC,我就希望后台作业停止。如果我大约五分钟不使用 PC,它可以继续。

后台工作没有最后期限。如果需要更长的时间也没关系。

我想放慢速度的工作是一个视频编码过程,它每个 CPU 使用一个线程。在我的笔记本电脑上,有 4 个线程产生 400% 的负载。

Jac*_*ijm 8

在使用计算机时管理(暂停)要求苛刻的过程的另一种方法

我结合 测试了下面的脚本kdenlive,渲染了一个大视频。在测试中,它运行良好。(后台)脚本本身几乎不消耗资源。它基本上做的唯一一件事就是每 5 秒检查一次目标进程是否运行。只有这样,它才会检查当前的空闲时间。两者对您的系统毫无意义

该脚本基于xprintidle. xprintidle跟踪键盘和鼠标事件并测量没有活动的时间。如果请求进程启动,它会立即暂停(因为计算机显然已被使用),命令如下:

kill -STOP <pid>
Run Code Online (Sandbox Code Playgroud)

如果随后空闲时间超过某个(任意)时间限制,则使用以下命令恢复进程:

kill -CONT <pid>
Run Code Online (Sandbox Code Playgroud)

随后,如果空闲时间回到设定的时间限制以下,则该过程再次暂停,依此类推。

在此处输入图片说明

空闲时间之前/期间/之后的cpu使用率,使用melt用kdenlive渲染大视频

关于 kill -STOP 和 kill -CONT

虽然在中提到了论点-STOP和,但奇怪的是没有解释。但是,例如在这里我们可以阅读它的作用:-CONTman kill

基本上kill -STOP 1234会用 暂停进程pid 1234,然后kill -CONT 1234恢复它。就好像您可以让单个应用程序而不是整个计算机休眠一样。

因此,在使用计算机(非空闲)时,要求的进程进入睡眠状态。

查找要暂停的进程

该脚本以进程名称(如果您使用计算机时希望暂停)作为参数运行。

诀窍是找到要暂停的正确进程。它不会是您的视频编辑器的名称,因为它肯定会使用外部工具进行渲染。就我而言,kdenlive使用melt. 脚本melt在定义的空闲时间后成功暂停并恢复渲染。

top如果您不确定进程名称,可以使用该命令。top在终端中运行并按Ctrl+M对内存使用情况进行排序。要求苛刻的过程将在顶部。

剧本

kill -STOP <pid>
Run Code Online (Sandbox Code Playgroud)

如何使用

  • 脚本需要 xprintidle

    sudo apt-get instal xprintidle
    
    Run Code Online (Sandbox Code Playgroud)
  • 将上面的脚本复制到一个空文件中,另存为 manage_proc.py

  • 测试-通过命令运行它

    python3 /path/to/manage_proc.py <seconds> <process_name>
    
    Run Code Online (Sandbox Code Playgroud)

    <seconds>您希望流程开始之前的空闲时间(以秒为单位)在哪里。在脚本启动
    启动消费进程。

  • 如果一切正常,将脚本添加到启动应用程序:Dash > 启动应用程序 > 添加命令:

     python3 /path/to/manage_proc.py <seconds> <process_name>
    
    Run Code Online (Sandbox Code Playgroud)