You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何访问由其他进程启动的VIM会话?

如何接管root为user1启动的VIM会话

先给你几个实用的解决方案,都是实际场景里验证过的:

首先第一步,先找到那个VIM进程的PID,用ps命令就能定位:

ps aux | grep "vim file.txt"

记下对应的进程ID(比如假设是1234),接下来试试下面这些方法:

方法1:用reptyr直接接管终端

这是最直接有效的办法,reptyr工具可以把运行中的进程“转移”到你当前的终端会话里。如果系统没装,先安装一下——Debian/Ubuntu系用apt install reptyr,RHEL/CentOS系用yum install reptyr即可。

安装完成后执行:

reptyr 1234

执行完你当前的终端就会直接切换到那个VIM会话,能正常查看或编辑内容了。因为你本身就是user1,权限上完全没问题;如果遇到SELinux报错,临时关闭或者调整下策略就能解决。

方法2:试试VIM的远程控制(看启动参数)

如果root启动VIM的时候碰巧加了--servername参数,那你可以用VIM自带的远程功能连接。先看看有没有可用的VIM服务器:

vim --serverlist

如果能看到对应的服务器名,直接用下面的命令连接过去:

vim --servername <找到的服务器名> --remote

要是没查到服务器名,说明root启动时没开这个功能,直接跳过这个方法就行。

方法3:从进程内存/文件描述符提取内容

如果上面的方法都走不通,你还能直接从VIM进程的内存或打开的文件描述符里读取内容:

  1. 先进入该进程的fd目录:
cd /proc/1234/fd

这里的数字就是进程打开的文件描述符,你可以逐个用cat查看,比如cat 3(通常对应打开的目标文件),就能看到file.txt的内容。
2. 如果上面的方式不行,直接提取进程内存里的可打印字符串:

strings /proc/1234/mem

你可以搭配grep过滤关键词,比如strings /proc/1234/mem | grep "你需要的内容",快速定位目标信息。

关于交换文件无效的问题

你说杀进程生成交换文件没用,大概率是交换文件的位置不对——VIM的交换文件默认存在root执行su - user1 -c ...命令时的当前目录,不是user1的家目录。你可以全局搜索找找:

find / -name ".file.txt.swp" 2>/dev/null

找到后用vim -r .file.txt.swp就能恢复内容,但前提是进程被正常终止,交换文件生成完整。


内容的提问来源于stack exchange,提问作者user9294444

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:39:49