Phải làm gì khi Ctrl-C không giết công việc đang chạy?


98

Đôi khi, các quy trình bỏ qua tín hiệu SIGINT được gửi bởi Ctrl- Ctrong Bash. Ví dụ, manvi. Giả sử bạn không muốn google hoặc đọc hướng dẫn về cách thoát quy trình đang chạy, có chuỗi khóa nào sẽ luôn hoạt động (mà không cần rời khỏi thiết bị đầu cuối) không?

Câu trả lời:


141

Gửi tín hiệu SIGQUIT với Ctrl+ \.

.. $ sleep 10
^\Quit

→ Điều này tương đương với kill -3 pid. Các chương trình chạy trong không gian người dùng đừng bỏ qua sigquito.

Ngoài ra còn có một bộ phím tắt Magic SysRq . Một trong những điều thú vị hơn là đây: Alt+ SysRq+ k. Nó giết chết mọi tiến trình trên bàn điều khiển ảo hiện tại. Nếu một trong số các ttys của bạn bị hỏng hoàn toàn và hoàn toàn, điều này có thể được sử dụng để quay lại . Trên Tty đang chạy X.org, nó có thể được sử dụng để giết X không thương tiếc.

Phím SysRq, trên hầu hết các bàn phím, giống như Phím In. Trên máy tính xách tay của tôi, nó có thể được gọi bằng phím Fn; Tức là Alt → Fn → In → k theo thứ tự đó.

Dưới đây là một số phím tắt quản lý quy trình cơ bản:

  • Ctrl+ Z: tạm dừng một quá trình (cộng với bgđể tiếp tục trong nền, fgđể nâng lên nền trước)
  • Ctrl+ C: lịch sự yêu cầu quá trình đóng cửa ngay bây giờ
  • Ctrl+ \: giết không thương tiếc quá trình hiện đang ở phía trước
  • Alt+ SysRq+ s: Ghi dữ liệu vào đĩa (luôn luôn làm điều này trước khi giết bất cứ điều gì quan trọng)
  • Alt+ SysRq+ s, k: giết không thương tiếc tất cả các quy trình hiện tại trên một bảng điều khiển ảo nhất định
  • Alt+ SysRq+ s, b: khởi động lại không thương tiếc mà không ngắt kết nối,
  • Alt+ SysRq+ r, e, i, s, u, b: An toàn r eboot e ven i f s ystem là u tterly b roken,

Lưu ý: Ctrl+ Z, trái ngược với Ctrl+ CCtrl+ \, cũng làm việc cho man, vi, less, và những thứ tương tự.

Khi nghi ngờ, quy trình follwing hầu như sẽ luôn hoạt động:

~$ sleep 10
^Z
[5]+  Stopped              sleep 10
~$ ps
  PID TTY          TIME CMD
 4804 pts/0    00:00:00 bash
 6207 pts/0    00:00:00 sleep
 6208 pts/0    00:00:00 ps
~$ kill -9 6207
[5]+  Killed                  sleep 10
~$ 

^ Z tất nhiên chỉ ra rằng Ctrl+ Zđã được nhấn.


Để có cái nhìn sâu hơn về Shell và Thiết bị đầu cuối, hãy xem câu trả lời của tôi về:


3
Hoạt động cho "ngủ 10" nhưng vẫn không hoạt động cho "người đàn ông" hoặc "vi". Rõ ràng "kill -9 pid" không hoạt động trong việc tiêu diệt cả hai quá trình. Tui bỏ lỡ điều gì vậy?
Olivier Lalonde

3
Ctrl + Z hoạt động với những thứ như ít hơn, man, vi, v.v. Sau đó, bạn có thể giết chúng bằng cách thực hiện psđể xem id tiến trình của chúng và giết chúng bằng cách sử dụng kill pidhoặc, nếu bạn không quan tâm đến các phiên bản khác của chương trình , killall vi. Trong mọi trường hợp, Ctrl-Z dường như luôn hoạt động.
Stefano Palazzo

5
Bạn cũng có thể làm kill %%để giết công việc cuối cùng và kill %5trong đó 5 là số công việc được hiển thị trong jobs.
Olivier Lalonde

2
Ctrl- \ gửi SIGQUIT , không phải SIGKILL. Có một số khác biệt quan trọng giữa SIGQUIT và SIGKILL. vi.wikipedia.org/wiki/SIGQUIT
Juliano

4
Làm cách nào để nhấn Ctrl+ \ khi không có \ phím trong bố trí bàn phím?
Forivin

14

Bạn có thể thử Ctrl+\


1
Không hoạt động với một trong hai manhoặc vi.

1
đã hoạt động trên Ubuntu 16.04
kRazzy R

8

Đôi khi, CTRL+Cviệc nhận được gửi đến chương trình hoặc kênh đầu vào sai. Điều này đặc biệt phổ biến với các trình soạn thảo vi, như , với các lệnh có đầu ra đường ống, các lệnh bash phức tạp liên quan đến các vòng lặp, v.v.

Một giải pháp đơn giản, nhanh chóng là đình chỉ công việc CTRL+Zvà sau đó giết nó theo số công việc: kill %1hoặc kill -9 %1, v.v.


6
  • Hãy thử một trong những điều sau:

    Ctrl+4

    Ctrl+\


  • Hoặc là:

    Ctrl+ Zrồi chạy:

    kill %1

Trong trường hợp %1là số lượng công việc được trả về khi bạn nhấn Control- Z. Thêm vào -9để buộc giết.


Khi bạn ở trong bảng điều khiển văn bản, bạn cũng có thể thử: Ctrl- SysRq. Hạt nhân sẽ giết quá trình.

Hoặc SysRq- k, hủy tất cả các quy trình trên bảng điều khiển ảo hiện tại (cũng có thể tiêu diệt các chương trình X và svgalib).

Lưu ý: Khi các phím SysRq ma thuật được sử dụng để giết chương trình đồ họa bị đóng băng, chương trình không có cơ hội khôi phục chế độ văn bản. Điều này có thể làm cho mọi thứ không thể đọc được.

Xem: Phím Magic SysRq và các tổ hợp lệnh của nó.


3

Để thoát khỏi người đàn ông , sử dụng q Để lại vi sử dụng:q


0

Có thể, bạn đã thay đổi lối tắt sao chép từ:

CTRL+ SHIFT+C

Đến

CTRL+C

Theo cách đó, khi bạn cố gắng giết một tiến trình, CTRL+ Ckhông hoạt động.

Cố gắng thay thế phím tắt sao chép thành CTRL+ SHIFT+ C.


1
Thay đổi phím tắt sao chép là không liên quan để buộc một quá trình bị chấm dứt!
SuB

Bạn có thể vui lòng mở rộng câu trả lời của bạn một chút không? Từng bước sẽ là lý tưởng, chủ yếu để OP có thể làm theo cùng với đề xuất của bạn. :)
ThatGuy

Điều này thực sự đã giúp tôi. Tôi đã quen với CTRL + C trên MacOS và không nhận ra lệnh Ubuntu là CTRL + SHIFT + C
ratskin

-1

Hãy thử Ctrl+ Alt+Backspace

Nếu bạn đang sử dụng Ubuntu 10.04, bạn muốn kích hoạt phím này để hoạt động.

Để bật Control- Alt-Backspace

Hệ thống Goto -> Tùy chọn -> Bàn phím

Chọn tab Bố cục và nhấp vào Tùy chọn Bố cục .

Chọn Chuỗi khóa để giết máy chủ X và bật Control+ Alt+Backspace .

Ghi chú:

Nhấn Ctrl- Alt- Backspacesẽ khởi động lại máy chủ X của bạn.


Chỉnh sửa câu hỏi để làm rõ rằng tôi muốn giết quá trình từ bên trong thiết bị đầu cuối.
Olivier Lalonde
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.