gpt4 book ai didi

linux - 如何强制换出的 zsh 进程换入?

转载 作者:IT王子 更新时间:2023-10-29 00:35:56 25 4
gpt4 key购买 nike

我的计算机上通常有许多长时间运行的 zsh 进程(分布在各种屏幕 session 中),但一段时间未使用的 shell 往往会被换掉。当我切换到这样一个换出的 shell 并按 enter(在空提示符下)时,shell 需要很多秒才能响应并显示新提示(但之后它会恢复正常工作)。

为了减轻我的烦恼,我想要一个命令(例如 unswap PID),我可以调用(从另一个已经响应的 shell)来强制换入 shell。

关于如何实现这一点有什么想法吗?

P.S. 我开始四处寻找一个命令来要求系统交换任何进程——但我没有找到这样的东西,让我相信这不可能。我在这里将我的问题集中在 zsh 上,因为这是我真正感兴趣的情况,我希望可能有针对该特定情况的解决方案。如果您有更通用的方法适用于任何进程(而不仅仅是 zsh),那也将非常受欢迎。

P.P.S. 起初我想到在我的 shell 中使用一个陷阱函数,然后它做了一些事件(任何事情)足以导致 shell 换入。用 WINCH 试过这个 信号但是,我发现它不起作用。 (也许信号没有传递给换出的进程?有信号吗?)


编辑:在我的典型情况下,我有一堆 zsh 进程在运行,然后我让浏览器保持打开状态(有多个 Gmail、Facebook 等选项卡)时间有点太长,导致浏览器囤积所有可用的 RAM 并挤压所有其他东西到交换区。桌面有一段时间没有响应,但很快就会消失。但是,当重新连接到屏幕 session 时,必须手动唤醒每个 shell(遍历它们并在每个 shell 中按 enter)。

最佳答案

this answer 中所述可以使用 gdb 转储进程的内存,以便取消交换。

我也查到了here有一个 gcore 脚本可以直接从命令行执行此操作(而不是首先必须启动 gdb 然后在其中执行其他命令),因此调用:

gcore -o /tmp/SOMETHING PID1 PID2 PID3

将导致具有 PID1、PID2 和 PID3 的程序不交换,并将它们的内容转储到文件 /tmp/SOMETHING.PID1/tmp/SOMETHING.PID2 等.

this answer中还有一个Python脚本它做同样的事情。虽然,诚然——作为对这个问题的回应——以一种更好的方式,因为这个脚本在 STDOUT 上输出转储,我们可以直接通过管道将其传送到 hell (嗯,我的意思是 /dev/null,当然)因为我们只对取消交换的副作用感兴趣。

关于linux - 如何强制换出的 zsh 进程换入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18029980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com