Để rõ ràng, tôi không nói về bất cứ điều gì cần phải có emacs để được đa luồng (mặc dù điều đó có lẽ cũng sẽ giải quyết điều này). Để sao chép:
- emacs -Q # Tôi đang chạy 24.4.1
- Tạo khung thứ hai
- Chuyển về khung đầu tiên
- Vỏ Mx
- Mx đổi tên-duy nhất (chúng ta sẽ tạo vỏ thứ hai sau)
- Bắt đầu chạy:
while true; do echo "hello world"; done
- Trong khung thứ hai, vỏ Mx
Shell thứ hai sẽ gần như không bao giờ hiển thị (hiếm khi nó hoạt động sau nhiều lần thử). Rõ ràng emacs sẽ không bao giờ nghỉ đọc đầu ra của vỏ đầu tiên để lắng nghe đầu ra đến từ bất kỳ quá trình nào khác. Nó sẽ là hành vi tốt hơn nhiều để nó làm tròn số vòng khi có nhiều quy trình với đầu ra đang chờ xử lý. Có cách nào để có được hành vi tốt hơn?
Bí quyết duy nhất tôi biết là làm cho bộ đệm tiến trình của riêng nó, nhưng thật không may, nó không hoạt động với tôi. Ngay cả khi tôi làm điều đó, tôi phải chạy một quy trình con để nghe một ổ cắm cho phần mềm nhận dạng giọng nói của tôi hoạt động để tôi thực sự có thể điều khiển vỏ ở vị trí đầu tiên, đó là cách tôi phát hiện ra điều này; chạy một vòng lặp vô hạn như ở trên sẽ ngăn chặn mọi dữ liệu khỏi ổ cắm.
start-process
với mộtset-process-filter
và mộtset-process-sentinel
- điều này cho phép tôi đi trên đường vui vẻ của tôi làm công cụ khác trong khi quá trình chạy - Tôi thậm chí gửi đầu ra của tôi đôi khi đến*Messages*
đệm sử dụnginsert
để vùng phản hồi của tôi là không bị ảnh hưởng, hoặc tôi sử dụng một bộ đệm đầu ra quy trình chuyên dụng (nếu cần). Ví dụ, tôi có thể chạy mộtrsync
phiên dài . Tôi không có bất kỳ kinh nghiệm nào khi cố gắng chạy nhiều đồng thời / dàistart-process
, vì vậy tôi không chắc Emacs sẽ xử lý hàng loạt chúng như thế nào.