Para ser claros, no estoy hablando de nada que requiera que emacs sea multiproceso (aunque eso probablemente también resolvería esto). Reproducir:
- emacs -Q # Estoy ejecutando 24.4.1
- Hacer un segundo cuadro
- Cambiar de nuevo al primer fotograma
- Mx shell
- Mx rename-uniquely (haremos un segundo shell más tarde)
- Comience a correr:
while true; do echo "hello world"; done
- En el segundo cuadro, Mx shell
El segundo shell casi nunca se mostrará (rara vez funciona después de repetidos intentos). Aparentemente, emacs nunca se tomará un descanso al leer la salida del primer shell para escuchar la salida proveniente de cualquier otro proceso. Sería mucho mejor comportamiento para el round robin cuando hay múltiples procesos con salida pendiente. ¿Hay alguna forma de mejorar el comportamiento?
El único truco que conozco es hacer que el shell buffer sea su propio proceso, pero desafortunadamente eso no funcionará para mí. Incluso si hago eso, tengo que ejecutar un subproceso para escuchar un socket para que mi software de reconocimiento de voz funcione, de modo que pueda controlar el shell en primer lugar, así es como descubrí esto; ejecutar un bucle infinito como el anterior evita que se eliminen datos del zócalo.
start-process
con ayset-process-filter
aset-process-sentinel
, esto me permite seguir mi camino feliz haciendo otras cosas mientras se ejecuta el proceso, incluso envío mi salida a veces al*Messages*
búfer usandoinsert
para que mi área de eco no se toque, o uso un búfer de salida de proceso dedicado (si es necesario). Por ejemplo, puedo ejecutar unarsync
sesión larga . No tengo ninguna experiencia tratando de ejecutar múltiples simultáneos / largosstart-process
, por lo que no estoy seguro de cómo Emacs manejaría una gran cantidad de ellos.