Làm thế nào để tôi buộc giết Emacs?


7

Tôi thường thấy mình có một cấu hình emacs không đầy đủ hoặc không hợp lệ, phá vỡ hành vi bình thường của kill-emacsnó đến mức nó dừng lại ở một lỗi.

Trong trường hợp này, tôi muốn giết chết emacs một cách mạnh mẽ, mà không cần dùng đến việc săn lùng PID và phát hành killtừ vỏ. Tôi có thể làm điều này trong Emacs Lisp tinh khiết không?


Tôi không chắc là tôi làm theo. Nếu kill-emacskhông thực hiện được các cách tiếp cận khác, cũng có thể bị phạm lỗi, vì có thể cuối cùng họ sẽ gọi kill-emacsbằng cách này hay cách khác. lỗi gì bạn nhận được? Nó có thể dễ dàng hơn để sửa lỗi.
Tyler

Ý tôi là, bạn có thể tạo một hàm gọi kill -9pid Emacs hiện tại chẳng hạn. Bạn sẽ phải rất rối tung để phá vỡ điều đó.
PythonNut

5
Bạn có thể thử thiết lập kill-emacs-hookđể niltrước khi gọi kill-emacs. Bạn cũng có thể lấy pid của Emacs bằng cách sử dụng emacs-pidvà khiến nó tự sát bằng cách gọi call-processbằng " kill -9".
Constantine

1
nếu bạn không muốn săn PID, vẫn có pkill & pgrep: \
Nsukami _ 16/12/14

1
Không liên quan, nhưng bạn có thể muốn tránh chạy nhiều phiên emacs
Sean Allred

Câu trả lời:


12

Bạn có thể thử thiết lập kill-emacs-hookđể niltrước khi gọi kill-emacs:

(defun really-kill-emacs ()
  "Like `kill-emacs', but ignores `kill-emacs-hook'."
  (interactive)
  (let (kill-emacs-hook)
    (kill-emacs)))

Ngoài ra, bạn có thể sử dụng PID của Emacs bằng cách sử dụng emacs-pidvà khiến nó tự sát bằng cách gọi call-processbằng " kill -9":

(defun brutally-kill-emacs ()
  "Use `call-process' to send ourselves a KILL signal."
  (interactive)
  (call-process "kill" nil nil nil "-9" (number-to-string (emacs-pid))))

3
Không phải là một bài phê bình về câu trả lời, chỉ là thông tin bổ sung: lưu ý rằng việc sử dụng tín hiệu chín ( -9in kill -9) sẽ mồ côi bất kỳ quá trình nào mà emacs đã sinh ra, giống như sẽ xảy ra nếu emacs là một tập lệnh shell đơn giản ..
Sean Allred

Mặc dù TERM thường không giết được emacs trong trạng thái bị hỏng. Vì vậy, nó có thể là điều duy nhất.
PythonNut

1

Đôi khi, tôi kết thúc với một số quy trình emacs không thể truy cập được đặt xung quanh. Emacsclient của tôi thường tự động khởi động một emacs và gọi - server-startTôi đoán có một số lỗi trong cấu hình của tôi ở đâu đó dẫn đến việc này xảy ra nhiều lần.

Tôi giết chết emacsen thêm killall emacstrong một cái vỏ. Cho đến nay, -9không cần thiết. (Nó cũng hoạt động khi chỉ có một emacs đang chạy, và tôi không phải săn lùng pid!)


Đôi khi, khi emacs treo hoàn toàn, -9cần thiết. Tất nhiên, điều này có nghĩa là emacs sẽ không thể tự sát, nhưng tôi chỉ thêm nó vào trong trường hợp.
PythonNut

Đây là điều duy nhất làm việc cho tôi sau khi ein:jupyter-notebookngăn chặn tất cả các phương pháp khác. Tôi đoán là đang treo ở đâu đó, nhưng tôi đã kết thúc tất cả các quy trình Python và giết tất cả các bộ đệm.
n1k31t4
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.