[技巧攻略] 一种 PC 串流服务器秒级暂停/恢复思路 只看楼主

书接上文:https://bbs.luryl.com/thread-9039926-1-1.html,我在 Linux 环境搭建了一套专门的 PC 游戏串流服务器,里面使用了 docker pause/unpause 来暂停容器,从而实现游戏的暂停和恢复,但是这个方案的缺点是如果暂停之前不杀掉 Sunshine 进程,则显卡不能进入 P8 低功耗模式,功耗还是很高,而杀掉 Sunshine,在恢复的时候会出现各种问题,恢复也很慢,导致实际体验并不理想。

最近突然想到为什么不干脆使用 Linux 自己的 SIGSTOP/SIGCONT 信号机制来暂停和恢复 Steam 进程以及所有的子进程(包括游戏)呢,所以写了一个新的脚本进行测试,实际的体验还挺不错。脚本地址:https://gist.github.com/ihainan/20cc4666a30bf5f7336cfff3a2b29f30

原理大家可以理解成,Linux 下有一个命令可以冻结一个应用,也有一个命令可以取消冻结一个应用。之所以我们要把 Steam 一起冻结,是为了让 Steam 的游戏时间统计也跟着暂停,而且 Steam 一个账号在多个设备只允许同时运行一个游戏,我们要避免暂停期间其他设备无法游戏。

实际测试效果如视频,恢复和暂停都是 1s 之内。



我先把代价说出来:因为没有对整个容器进行暂停,内核时间还在正常走,一些游戏,比如 P3R,存档统计时间是物理时间,你暂停的时间也算在内。理论上这个问题也可以通过伪造进程时钟(比如使用 libfaketime)来解决,但是我需要时间去研究。

那么优点是什么呢:

首先自然是秒级的暂停和恢复,非常快。其次是很稳定,我使用了一周多了,方便 P3R 爬塔随时待机,目前没遇到什么问题。其他优点与 docker pause 方案一致,比如运行期间的低功耗。



如上,跟大家分享最近串流服务器暂停/恢复的新思路。
顺便我最近在开发 AutoActions(参见之前我发的主题 https://bbs.luryl.com/thread-8914060-1-1.html)的一个跨平台替代,我希望能够进一步做到比如游戏自动化应用某个操作级,不用每次都手工添加。而且做了一个插件商店,大家有特殊的需求我也可以随时编写新的插件来实现。待测试没问题之后再开源和分享给大家。



牛逼,干货顶一个
顺便分享我目前的主力串流机 Pocket Fit,非广告,最近又喜欢上小屏了。缺点是非常容易沾指纹和积灰,北京更是如此。START 按键会被遥杆挡住,每次按都很麻烦。屏幕不是 OLED(当然对有些人是优点)。



之前入过 PS Portal,啥都好,就是码率实在是太低,后来还是给出掉了。
  • 5楼 ccxp
  • 2025-12-2 11:37
楼主nb~
跟版主同样配置