我通过 ssh (ubuntu) 登录系统。最近,当我直接从命令提示符启动 mc 时,需要很长时间才能启动并最终呈现熟悉的两窗格屏幕。另外,我无法进入命令提示符子 shell(使用 ctrl-o)。如果我在 tmux 下启动它,它会立即启动,并且 ctrl-o 可以正常工作。
直接在 mc 上运行 strace: http://pastebin.com/raw/br9SBZ9Y
与 tmux 下 mc 上的 strace 相比: http://pastebin.com/raw/mYE4vMii
似乎某些环境设置导致了巨大的停顿,但我无法确定它。有人可以帮忙吗?
谢谢,乔恩
答案1
mc 等待来自bash
(它为屏幕底部的命令行分叉的 shell)的响应超时。您可以通过滚动时间戳来查找超时。根据man select
,相关系统调用等待指定文件描述符上的输入。在成功的跟踪中,FD 7 是之前创建的pipe()
- 它是通往子进程的管道。在成功的情况下,我发现 bash 提示符jon@sonic:~$
已成功从管道中读出。我不记得最后是怎么找到的,抱歉。
搜索execv
确认写入的pidjon@sonic:~$
是bash
。然后我碰巧注意到tmux
失败案例中的某个地方开始了。 我怀疑是否喜欢像贝壳一样mc
奔跑!tmux
您必须有某种运行的 bash 启动脚本tmux
。 如果它已经在里面,它会避免运行它tmux
。所以mc
里面tmux
还好,但外面不行。
我会确保tmux
从登录脚本,而不是为 bash 子 shell 运行的脚本。这意味着.bash_profile
又不是.bashrc
。这里有一些与我的想法相符的信息:https://apple.stackexchange.com/questions/71929/how-to-change-mc-midnight-command-bash-prompt-on-os-x
答案2
谢谢,sourcejedi - 你击中了要害。我最近在 .bashrc 中添加了一些行,以便在登录时自动启动 tmux - 呃!我应该意识到其中的联系。这也是我无法从 mc 内进入子 shell(使用 ctrl-o)的原因。有关信息,启动 tmux 的行如下:
# enable autostart of tmux
if [[ "$TERM" != "screen" ]] ; then
# && [[ "$SSH_CONNECTION" == "" ]]; then
# Attempt to discover a detached session and attach
# it, else create a new session
WHOAMI=$(whoami)
if tmux has-session -t $WHOAMI 2>/dev/null; then
tmux -2 attach-session -t $WHOAMI
else
tmux -2 new-session -s $WHOAMI
fi
fi
极大的失败。我现在已将其移至 .bash_profile 中,一切正常!谢谢!
乔恩
(顺便说一句,我是原来的海报..因未使用 openauth 登录而导致在错误/新帐户下发布而打嗝)