Açık olmak gerekirse, emacs'ın çok iş parçacıklı olmasını gerektiren herhangi bir şeyden bahsetmiyorum (muhtemelen bu da çözülecektir). Yeniden üretmek:
- emacs -Q # 24.4.1 çalıştırıyorum
- İkinci bir kare yapın
- İlk kareye geri dön
- Mx kabuk
- Mx benzersiz olarak yeniden adlandır (daha sonra ikinci bir kabuk yapacağız)
- Koşmaya başla:
while true; do echo "hello world"; done
- İkinci çerçevede, Mx kabuğu
İkinci kabuk neredeyse hiç görüntülenmeyecektir (nadiren tekrarlanan denemelerden sonra çalışır). Görünüşe göre emacs, herhangi bir başka işlemden gelen çıkışı dinlemek için ilk kabuğun çıktısını okumaktan asla mola vermeyecektir. Bekleyen çıktıya sahip birden çok işlem olduğunda, robin'i yuvarlaması çok daha iyi bir davranış olacaktır. Daha iyi davranışlar elde etmenin bir yolu var mı?
Bildiğim tek hile kabuk tamponunu kendi süreci haline getirmek olurdu, ama maalesef bu benim için işe yaramayacak. Bunu yapsam bile, konuşma tanıma yazılımımın çalışması için bir soketi dinlemek için bir alt süreç çalıştırmam gerekiyor, böylece kabuğu ilk etapta kontrol edebiliyorum, bunu bu şekilde keşfettim; yukarıdaki gibi sonsuz bir döngü çalıştırmak herhangi bir verinin soketten alınmasını önler.
start-process
aset-process-filter
ve a ile kullanmayı seviyorumset-process-sentinel
- bu işlem devam ederken başka şeyler yapmamın yolunu açmama izin veriyor - Hatta yankı alanımın dokunulmaması için çıktımı bazen*Messages*
ara belleğe gönderiyoruminsert
veya kullanıyorum özel bir işlem çıkış tamponu (gerekirse). Örneğin, uzun birrsync
oturum çalıştırabilirim . Birden fazla eşzamanlı / uzun çalıştırmaya çalıştığım herhangi bir deneyimim yokstart-process
, bu yüzden Emacs'ın hepsini nasıl halledeceğinden emin değilim.