我曾经emacsclient
在命令行中使用它作为编辑器,但令我烦恼的是,当我在 中工作时,它会挂起终端窗口emacs
。
我尝试通过运行来后台运行该过程emacsclient somefile.txt &
,但这导致了很多“管道损坏”。我不知道那是什么,但我的文件被损坏了。我已经学会了如何处理这个问题。
最近,我也开始用它latexmk
来编写研究论文。我尝试latexmk -pvc &
在后台运行一个连续编译过程,但再次遇到了“管道破裂”的问题。
虽然我通常使用选项卡式终端,可以通过打开新窗口来解决繁忙的窗口问题,但我还是喜欢拥有完整的命令历史记录。由于大多数命令都是在第一个终端窗口中输入的,因此它具有最佳历史记录。
但我发现自己总是在没有屏幕模拟器的机器上远程工作。有没有一种内置的方法可以在一个终端窗口中进行多任务处理?
答案1
据我所知,后台进程管道损坏的唯一原因是您关闭了启动该进程的终端窗口。即使它在后台,它仍然通过管道连接到 stdin 和 stdout 的终端。如果您关闭、注销或退出终端,进程的管道将损坏,并且进程将收到终止信号(我相信是 SIGHUP)。
对此问题的解决方案可能是使用nohup
。nohup 将新后台进程的 stdin、stdout 和 stderr 重定向到文件并阻止向进程发送 SIGHUP。
要使用它,您可以运行nohup emacsclient somefile.txt &
,或者如果您想避免使用它来捕获 stdout 和 stderr 的 nohup.out 和 nohup.err 文件,您可以使用 完全摆脱输出nohup emacsclient somefile.txt &> /dev/null &
。
由于输入这些信息来编辑文件有点不方便,因此您可能需要将其粘贴在别名或 shell 脚本中。