如果我启动一个进程然后删除它的二进制文件,我仍然可以从/proc/<pid>/exe
以下位置恢复它:
$ cp `which sleep` .
$ ./sleep 10m &
[1] 13728
$ rm sleep
$ readlink /proc/13728/exe
/tmp/sleep (deleted)
$ cp /proc/13728/exe ./sleep-copy
$ diff sleep-copy `which sleep` && echo not different
not different
$ stat /proc/13728/exe
File: ‘/proc/13728/exe’ -> ‘/tmp/sleep (deleted)’
Size: 0 Blocks: 0 IO Block: 1024 symbolic link
Run Code Online (Sandbox Code Playgroud)
另一方面,如果我自己创建符号链接,请删除目标并尝试复制:
cp: cannot stat ‘sleep’: No such file or directory
Run Code Online (Sandbox Code Playgroud)
/proc
是内核的接口。那么这个符号链接是否实际上指向加载到内存中的副本,但有一个更有用的名称?exe
链接究竟是如何工作的?
在tmux
终端中运行分发升级以避免远程连接问题或 X 服务器问题(例如opensuse 文档)已成为一种流行。
然而,这并没有考虑已经升级的tmux
客户端和管理正在运行分发升级的终端的服务器之间版本不匹配的风险。
为了实现风险,必须在升级过程中将 tmux 控制台留给普通终端。如果 tmux 客户端在此期间升级,则将无法重新连接到 tmux 会话。相反运行tmux attach
或tmux ls
一个人会得到
# tmux ls
protocol version mismatch (client 7, server 6)
Run Code Online (Sandbox Code Playgroud)
从 OpenSUSE 12.2 升级到 12.3 时,我遇到了这个客户端 7、服务器 6 版本不匹配的情况。我能想到的一个快速解决方案是tmux
从旧的分发存储库下载rpm 并解压缩它,cpio
因为机器在升级过程中具有网络连接。
wget http://download.opensuse.org/distribution/12.2/repo/oss/suse/i586/tmux-1.6-2.1.2.i586.rpm
rpm2cpio ../tmux-1.6-2.1.2.i586.rpm > tmux-1.6.cpio
cpio -i -d < tmux-1.6.cpio
./usr/bin/tmux
Run Code Online (Sandbox Code Playgroud)
在 tmux 会话中运行发行版升级时,是否应该对可能的版本不匹配发出警告?有没有一种简单的方法可以让 tmux 客户端以与旧服务器兼容的模式运行?