Làm cách nào để hủy bỏ lệnh bị kẹt trong máy chủ Ubuntu?


11

Tôi biết có ctrl+ c, nhưng đôi khi điều đó không hiệu quả. Trong máy tính để bàn Ubuntu, tôi chỉ có thể đóng cửa sổ đầu cuối và mở một cửa sổ mới khi điều này xảy ra, nhưng làm thế nào để giải quyết vấn đề này bằng cách sử dụng CLI trong máy chủ Ubuntu (mà không cần khởi động lại hộp)?


Câu trả lời:


21

CTRL+Csẽ gửi SIGINTđến ứng dụng. Ứng dụng có thể cấu hình một trình xử lý cho tín hiệu này hoặc nó có thể bỏ qua tín hiệu. Theo mặc định, không có xử lý và SIGINTsẽ giết ứng dụng.

Bạn có thể sử dụng CTRL+\sẽ gửi SIGQUIT. Điều này cũng sẽ tạo ra một bãi chứa lõi nếu giới hạn lõi không bằng không.

Bạn có thể tạm dừng quá trình và quay lại shell với CTRL+Z, điều này sẽ dừng việc thực thi quy trình và quay lại dấu nhắc shell. Quá trình sẽ có trong bộ nhớ và nó sẽ có sẵn như là một công việc trong trình bao hiện tại. Sau đó, bạn có thể sử dụng kill -SIGNAL %%hoặc kill -SIGNAL %<job_ID>gửi tín hiệu cho công việc đó. Ví dụ: để giết công việc cuối cùngkill -9 %%

Nếu không ai trong số họ đang làm việc, bạn luôn có thể gửi SIGTERM, thì, như là phương sách cuối cùng, SIGKILLsẽ chấm dứt bất kỳ quy trình nào. Tín hiệu này như bất kỳ tín hiệu nào khác phải được gửi cùng một người dùng với quá trình bạn đang cố gắng dừng hoặc là root. Để gửi SIGKILLđến quá trình, đầu tiên tìm thấy quá trình này với ps auxhoặc ps -edf, sau đó chạy kill -SIGKILL <process_ID>, nơi <process_ID>PIDcột trong psđầu ra.

Các tín hiệu không thể được gửi nếu quá trình trong một cuộc gọi liên tục. Các cuộc gọi liên tục là các chức năng hạt nhân không thể dừng lại và thường xảy ra do trình điều khiển xấu (ví dụ: trình điều khiển không được gửi lại ). Không thể dừng quá trình trong trạng thái ngủ liên tục cho đến khi cuộc gọi được hoàn thành hoặc máy chủ được khởi động lại.

Nếu một quá trình trở thành zombie , nó sẽ không sử dụng bất kỳ tài nguyên nào chỉ chiếm không gian trong bảng quy trình. Một quá trình zombie không thể nhận được tín hiệu.

Danh sách các tín hiệu cho kiến ​​trúc hiện tại có thể được tìm thấy với kill -l

Xem các trang người đàn ông của kill, psbash. Để xem một trang người đàn ông sử dụng một cái gì đó như:man ps


2

Nếu bạn có quyền truy cập bàn điều khiển đầy đủ, bạn có thể làm Alt- F1..12và có được bàn điều khiển mới.

Từ đó, bạn có thể thực hiện một danh sách quy trình như sau:

ps aux | grep <process-name>

Sau đó thực hiện một killID quá trình:

kill -9 <pid>

Nếu bạn không có quyền truy cập bàn điều khiển đầy đủ, chỉ cần mở một cửa sổ đầu cuối khác (có thể thông qua PuTTY hoặc tương tự) và thực hiện các bước liệt kê quy trình trên và hủy các bước.


1

Ctrl C gửi SIGINT cho quá trình chạy của bạn. Nếu bạn không muốn mở bảng điều khiển khác, bạn có thể gửi SIGQUIT bằng Ctrl \. Điều này sẽ giải quyết hầu hết các ứng dụng treo hàng ngày mà SIGINT không có.

Cá nhân tôi muốn có một cách để gửi SIGKILL bằng một phím tắt nhưng tôi không biết cách nào để làm như vậy.


1

Tôi xem xét pgreppkillđể dễ sử dụng hơn so killvới ID quy trình rõ ràng.

Ngoài ra, thay vì bắt đầu bằng tín hiệu 9 (SIGKILL), hãy xem xét bắt đầu với SIGTERM mặc định (15). Điều này sẽ cho quá trình một cơ hội để chấm dứt một cách duyên dáng (nếu có thể). pkill -15 thingpkill thingnên tương đương.

Đây là cách nó sẽ làm việc. Hãy nói rằng ntpd được treo.

Các quá trình là gì? (Bạn có thể bỏ qua pkill nếu bạn tin rằng bạn sẽ không có kết quả dương tính giả).

$ pgrep -fl ntp
1034 /usr/sbin/ntpd
1037 /usr/sbin/ntpd

Giết các tiến trình:

$ pkill ntpd

Sử dụng pgrepmột lần nữa để xem nếu nó đã thành công.

Nếu không, cuối cùng chuyển đến pkill -9.


0

Bạn sẽ chuyển sang một thiết bị đầu cuối mới, tìm ra PID của quá trình bị kẹt (sử dụng ps), sau đó sử dụng killđể giết tiến trình. Lần đầu tiên tôi sẽ sử dụng kill (PID). Nếu nó không hoạt động, tôi sẽ sử dụng kill -9 (PID). Nếu điều đó không dừng quá trình, máy cần phải được khởi động lại.


0

Cntrl+ \làm việc cho tôi (nơi Cntrl+ choặc zkhông làm việc)

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.