我正在尝试卸载硬盘并打开多个 tmux 会话。
$ sudo umount /mnt/PIHDD
umount: /mnt/PIHDD: target is busy
(In some cases useful info about processes that
use the device is found by lsof(8) or fuser(1).)
$ lsof /mnt/PIHDD/
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
tmux 1415 pi 36r DIR 8,1 20480 5 /mnt/PIHDD
$ ps 1415
PID TTY STAT TIME COMMAND
1415 ? Ss 17:26 tmux
我如何知道要查看哪个 tmux 会话,或者其他原因是什么?我假设某个会话包含一个窗口,其中当前目录位于该驱动器上。
我手动查看了所有会话中的所有窗格,但找不到罪犯。
https://superuser.com/a/212913/291007看起来很有帮助,但根本cat /proc/1415/environ
不包含。^TMUX=
但它确实包含^@_=/usr/bin/tmux^@
.
这个答案确实生成了预期的输出,但不包含 PID 1415。
根据lsof -p 1415
,该进程当前已打开我在 tmux 中打开的每个目录 - 而不仅仅是一个会话的目录。这意味着带有 PID 的线程1415
实际上是 tmux 本身。值得注意的是,它只lsof
列出了挂载点 dir /mnt/PIHDD
,而不列出其中的任何文件。
有趣的是,它ls /proc/1415/fd
以与其他驱动器不同的颜色显示相关的安装点:
也许也相关:安装的驱动器/mnt/PIHDD
是 NTFS 格式的。驱动器/mnt/oceanPortal
为 EXT-4。
为什么 tmux 使用我的硬盘以及如何安全地停止它?
可能有帮助的其他信息:
$ gdb -p 1415
(gdb) info proc
process 1415
cmdline = 'tmux'
cwd = '/home/pi'
exe = '/usr/bin/tmux'
自从我最初问这个问题以来,我重新启动了正在运行的 raspi,以查看重新启动 tmux 是否会重新获取该文件描述符。现在tmux
,具有新 PID 的进程不再具有/mnt/PIHDD
in /proc/{pid}/fd
。
这意味着我无法验证任何给出的解释。另一方面,如果有人遇到同样的问题并且能够重新启动 tmux,请尝试一下!
它可能是关闭文件描述符本来可以毫无问题地工作。但我仍然希望得到有知识的确认,并且解释为什么 tmux 有那个 fd。
不相关的信息可能会对未来的我的人有所帮助:
- 不要尝试将 gdb 连接到 tmux从 tmux 内部。如果这样做,请打开一个新的终端/ssh 连接并获取
kill -9
从 .gdb 获取的 pidps -ax | grep gdb
。