Control-g가 매우 큰 파일에서 작동하지 않을 때 emacs를 중단하는 방법은 무엇입니까?


16

Emacs에서 매우 큰 (예 : 128MB) 파일을보고 파일 끝으로 점프 할 때 일종의 O (n ^ 2) 또는 더 나쁜 동작이 발생했습니다. 텍스트를 상황에 따라 채색하기 위해 채색 알고리즘과 관련이 있다고 생각합니다. control-g (keyboard-quit)를 입력하면 작동에 영향을 미치지 않습니다. emacs 세션을 죽이지 않고 복구하는 방법을 원합니다. SIGINT를 보내려고했지만 emacs가 종료되었습니다. 내가 보낼 수있는 신호 나 다른 방법 (아마도 디버거)이 있으면 실행중인 모든 작업을 강제로 포기하고 제어권을 반환하도록 강제 할 수 있습니까?


글꼴 잠금을 중단 할 수있는 방법을 모르지만 이 Emacs Wiki 페이지에서 글꼴 잠금 속도를 높이는 방법을 찾을 수 있습니다 .
Aaron Miller

5
탈출을 3 번 시도 했습니까?
yPhil

예, 귀하의 글꼴 잠금 코드가 잘못되었을 수 있습니다. font-lock-keywords정규식을 신중하게 검사하여 문제를 찾으십시오.
Drew

1
EMACS : 8 메가 바이트 및
지속적으로

2
탈출을 세 번 때리는 것은 나를 위해 아무것도하지 않습니다.
WilliamKF

답변:


9

글꼴 잠금 모드인지 의심됩니다. 그것은 아마도 보이는 것 근처의 섹션 만 할 것입니다. 아마도 메모리에 데이터를 복사하고있을 것입니다.

sigusr1

sigusr2

이멕스 프로세스가 신호를 수신 할 경우, 이러한 이벤트 생성 SIGUSR1하고 SIGUSR2. 신호에는 추가 정보가 없으므로 추가 데이터가 없습니다. 디버깅에 유용 할 수 있습니다 ( 오류 디버깅 참조 ).

출처 : GNU Emacs Lisp 참조 매뉴얼 : 기타 이벤트

나는 그것이 무엇을 할 것인지 (또는 어떤 emacs를 실행하고 있는지) 알지 못하지만 아마도 비파괴적인 신호 (USR1 또는 USR2)를 시도 할 수 있습니다.

$ kill -USR1 pid

또는 잠을 자고 회복되는지 확인할 수 있습니다.


기계가 얼마나 바빠 (CPU 및 디스크) 궁금합니다. 그것이하는 일에 대해 조금 말해 줄 수 있습니다. .. 그리고 다른 emacs 사본을 실행하고 새로운 것을 죽일 수 있습니다.
9mjb

3
와우, 전송 kill -USR2이맥스 맥은 JS2 모드에서 큰 파일을로드하고 isearch 기능을 시작 - 비슷한 상황에서 날 위해 일했습니다. USR2는 isearch를 종료하고 디버거를 시작했습니다. 프로세스를 죽이는 것보다 훨씬 낫습니다!
William

나는 당신의 의심에 동의하지 않습니다. 살해는 나를 위해 일했다. 디버거로 나를 끌었고 font-lock-default-fontify-region이 붙어있는 곳이었습니다.
Brian C.

2

emacs가하는 신호 처리에 대해 잘 모르지만 server-start~ / .emacs 파일 을 넣어 Emacs Server를 사용하여 emacs 실행 인스턴스에서 RPC를 수행 할 수 있습니다.

그런 다음 emacs를 죽이고 쓰고 싶을 때 쉘에서 호출 할 수 있습니다 emacsclient -e '(save-buffers-kill-emacs t)'.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.