明确地说,我不是在谈论任何需要emacs多线程的东西(尽管这也可能会解决这个问题)。复制:
- emacs -Q#我正在运行24.4.1
- 制作第二帧
- 切换回第一帧
- MX壳
- MX唯一重命名(稍后我们将制作第二个Shell)
- 开始运行:
while true; do echo "hello world"; done
- 在第二帧中,Mx shell
第二个shell 几乎不会显示(很少会反复尝试才能工作)。显然,emacs从读取第一个shell的输出到侦听来自任何其他进程的输出不会中断。当有多个进程具有待处理的输出时,对它进行循环将是更好的行为。有什么办法可以取得更好的行为?
我知道的唯一技巧是使shell缓冲自己的进程,但是不幸的是,这对我不起作用。即使这样做,我也必须运行一个子进程来侦听套接字,以使我的语音识别软件正常工作,以便我实际上可以首先控制外壳,这就是我发现这一点的方式;像上面那样运行无限循环,可以防止从套接字中取出任何数据。
嗯,有趣的发现。两个外壳程序的下级进程都是独立的进程,显然Emacs仍在处理其主命令循环而没有问题。但是,我怀疑当它轮询劣质FD时,总是在第一个外壳上找到东西,而从未处理第二个FD。如果您在第一个shell中杀死了while [1],第二个shell确实会如您所愿地出现。对于开发人员邮件列表,这可能是一个问题。
—
stsquad
我还有另一个问题,但这是带有框架的图片:lists.gnu.org/archive/html/bug-gnu-emacs/2015-10/msg01084.html
—
ReneFroger 2015年
start-process
与aset-process-filter
和a 一起使用set-process-sentinel
-这使我可以在进程运行时继续做其他事情-有时甚至使用来将我的输出发送到*Messages*
缓冲区,以insert
使我的回声区域保持不变,或者我使用专用的过程输出缓冲区(如果需要)。例如,我可以进行长时间的rsync
会话。我没有尝试同时运行多个命令或冗长的代码的经验start-process
,所以我不确定Emacs如何处理其中的所有操作。