분명히하기 위해, 나는 emacs가 멀티 스레드되어야하는 것에 대해 이야기하고 있지 않습니다 (아마도 이것을 해결할 것입니다). 재현하려면 :
- emacs -Q # 24.4.1을 실행 중입니다
- 두 번째 프레임 만들기
- 첫 번째 프레임으로 다시 전환
- MX 쉘
- Mx는 고유하게 이름을 바꿉니다 (나중에 두 번째 쉘을 만들 것입니다)
- 실행 시작 :
while true; do echo "hello world"; done
- 두 번째 프레임에서 Mx shell
두 번째 쉘은 거의 표시되지 않습니다 (반복 시도 후에 는 거의 작동하지 않음). 분명히 emacs는 다른 프로세스에서 들어오는 출력을 듣기 위해 첫 번째 쉘의 출력을 읽는 것을 중단하지 않을 것입니다. 보류중인 출력을 가진 여러 프로세스가있을 때 로빈을 반올림하는 것이 훨씬 더 나은 동작입니다. 더 나은 행동을 취할 수있는 방법이 있습니까?
내가 아는 유일한 트릭은 쉘 버퍼를 자체 프로세스로 만드는 것이지만 불행히도 그것은 나를 위해 작동하지 않습니다. 그렇게해도, 음성 인식 소프트웨어가 작동하기 위해 소켓을 들으려면 서브 프로세스를 실행해야하므로 실제로 쉘을 처음부터 제어 할 수 있습니다. 위와 같이 무한 루프를 실행하면 데이터가 소켓에서 제거되지 않습니다.
start-process
aset-process-filter
와 a 를 사용 하고 싶습니다set-process-sentinel
. 프로세스가 실행되는 동안 다른 작업을 수행 할 수있게 해줍니다. 내 에코 영역이 손상되지 않도록 때때로 출력을*Messages*
버퍼로 보냅니다.insert
전용 프로세스 출력 버퍼 (필요한 경우) 예를 들어, 긴rsync
세션을 실행할 수 있습니다 . 나는 여러 개의 동시 / 긴 실행을 시도한 경험이 없으므로start-process
Emacs가 어떻게 진행되는지 잘 모르겠습니다.