多年来,当我通过 SSH 连接工作时,我会运行sudo vi ...
来编辑配置文件。如果我需要在命令行上执行某些操作,我会按 Ctrl+Z 暂停编辑器,执行一些操作,然后fg
再返回。
但这不再按预期工作(据我所知,从 Ubuntu 14.04 开始)。编辑器可以正常暂停,但我第一次尝试恢复时好像什么都没发生(或者它可能暂时恢复但随后再次暂停)。如果我fg
第二次尝试,编辑器似乎恢复了,但我按下的任何键都只会回显到控制台。但此时按下 Ctrl+Z 确实会暂停它并返回到 shell。
我不知道如何重新获得对编辑器的控制权。我通常只能sudo kill
通过进程 ID 来获取控制权(kill %1
返回“操作不允许”,正如我所料,因为编辑器是以 root 身份运行的)。
请不要建议使用screen
和/或单独的终端,因为我已经这样做了。我想知道是否有解决这个特定问题的方法,因为按 Ctrl+Z 是一种根深蒂固的习惯,我一直不假思索地这样做。Ubuntu 最近是否更改了一些安全模型?
更新
我还没有弄清楚这个问题,但我认为这与暂停嵌套进程有关。我不确定这是否是 sudo 特有的。我无法可靠地重现它,但这是导致它最常发生的序列:
sudo vi
filename
- Ctrl+Z暂停 vi
vi
another-filename
- Ctrl+Z
fg 1
尝试恢复以 root 身份运行的 vi。此时,shell 只会说[1]+ Stopped sudo vi filename
。再次尝试fg 1
似乎会恢复 vi,但任何击键都只会回显到控制台。
似乎发生的情况是,当我暂停 时sudo vi
,sudo
和vi
进程都停止了。当我fg
第一次暂停 时,只有sudo
恢复。当我fg
第二次暂停 时,sudo
停止了,但vi
恢复了。在正常情况下,两个进程都应该恢复。