相关疑难解决方法(0)

/proc/<pid>/exe 符号链接与普通符号链接有何不同?

如果我启动一个进程然后删除它的二进制文件,我仍然可以从/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链接究竟是如何工作的?

linux symlink proc

28
推荐指数
2
解决办法
1万
查看次数

分发升级期间 tmux 客户端/服务器版本不匹配

tmux终端中运行分发升级以避免远程连接问题或 X 服务器问题(例如opensuse 文档)已成为一种流行。

然而,这并没有考虑已经升级的tmux客户端和管理正在运行分发升级的终端的服务器之间版本不匹配的风险。

为了实现风险,必须在升级过程中将 tmux 控制台留给普通终端。如果 tmux 客户端在此期间升级,则将无法重新连接到 tmux 会话。相反运行tmux attachtmux 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 客户端以与旧服务器兼容的模式运行?

opensuse tmux upgrade

5
推荐指数
1
解决办法
1029
查看次数

标签 统计

linux ×1

opensuse ×1

proc ×1

symlink ×1

tmux ×1

upgrade ×1