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.
fuente
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.Respuestas:
Entonces, esta no es una solución adecuada, pero ejecuté su prueba al revés (por ejemplo, el while [1] en el segundo shell) y funciona bien. Como solución alternativa, puede asegurarse de que cualquier búfer de shell que probablemente genere una gran producción se cree más tarde que aquellos en los que desea interactividad. De esa manera, los shells interactivos son los primeros en ser manejados por la encuesta inferior de Emacs antes de finalmente manejar el que genera mucha salida.
En la práctica, si está ejecutando una selección de shell interactivo, es probable que no se encuentre en una situación en la que uno acapare la E / S durante tanto tiempo. Si necesita algo así, ¿tal vez redirigir la salida a un archivo y usar el modo de vista es una mejor solución?
fuente