Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

Làm thế nào để hủy một quy trình trong Linux

Có rất nhiều phương pháp có thể được sử dụng để giết một tiến trình trong Linux. Hướng dẫn này sẽ dạy bạn cách tìm và loại bỏ các quy trình bị hỏng.

Một quá trình có thể trở nên mồ côi một cách dễ dàng. Cho dù có mục đích hay không, một quy trình mẹ có thể bị lỗi và để một quy trình con chạy. Đôi khi, một quy trình mẹ không đạt được một quy trình con đã hoàn thành và nó trở thành một thây ma.

Cả hai quy trình này đều bị kẹt và cần sự can thiệp thủ công. Nhập kiểm soát công việc. Hãy xem cách loại bỏ các quy trình bị hỏng.

Hãy xem xét một số lệnh:

  • hàng đầu (và tại sao htop có lẽ tốt hơn)
  • ps
  • giết

Trên cùng (Tìm kiếm và Hủy bỏ)

Trước khi bạn có thể bắt đầu gửi thông báo tiêu diệt cho tất cả các quy trình, bạn cần biết những gì bạn có. Chúng tôi không cho rằng chúng tôi có các quy trình bị hỏng đang chạy và biết chính xác những gì cần tìm. Đó là những gì chúng tôi có hàng đầu vì. Hãy chạy vim và bật nó trong nền.

Làm thế nào để hủy một quy trình trong Linux

vim

Được rồi, bây giờ chúng ta có một quy trình mà bình thường chúng ta không thể tương tác. Hãy chạy trên cùng . Đầu ra bình thường không hữu ích, vì vậy chúng tôi sẽ chạy một bộ lọc.

  • Nhấn shift + l
  • Nhập vim
  • Nhấn enter
Làm thế nào để hủy một quy trình trong Linux

hàng đầu

Có đầu ra của chúng tôi. Bạn sẽ nhận thấy ở dòng đầu tiên, nó cho chúng tôi biết thời gian hoạt động, số lượng người dùng và mức trung bình tải của chúng tôi. Bạn cũng sẽ nhận thấy có thông tin quan trọng trong các cột. Hàng ngày bình thường, tôi đang xem S , % CPU TIME + . Nếu một tiến trình ở trạng thái Z (zombie), tôi biết phải giết nó. Nếu một quá trình có trên 100% CPU, nó sẽ chạy quá mức và cũng có thể cần phải bị giết. Hoặc nếu quá trình đã diễn ra trong một vài ngày, có thể đã đến lúc khởi động lại quá trình đó. Mặc dù điều đó có thể là hoang tưởng và không cần thiết trong đa số trường hợp.

Hôm nay chúng ta đang xem xét dòng thứ hai, săn tìm thây ma và tìm kiếm trẻ mồ côi. Đối với ví dụ của chúng tôi, chúng tôi không có quy trình zombie đang chạy, vì vậy chúng tôi sẽ lọc các quy trình "2 đã dừng".

  • Nhấn o
  • Loại: S =T
Làm thế nào để hủy một quy trình trong Linux

Lọc đầu

Bây giờ chúng tôi đã lọc xuống chỉ các quy trình trong S =T (trạng thái =đã dừng) bộ lọc, chúng ta có thể giết chúng. Khi ở trên cùng, bạn có thể nhấn k , nhập quy trình PID và nhấn enter. Nếu bạn đang chạy qua, bạn sẽ nhận thấy có thể mất một lúc để kết thúc. Thay vào đó, hãy nhấn k một lần nữa, nhập PID, và thay đổi tín hiệu thành 9 .

Nó không hoàn hảo, nhưng nếu bạn có cửa sổ trên cùng chạy dưới dạng cửa sổ trạng thái, thì bạn đã ở đó. Bạn cũng có thể gửi tín hiệu tiêu diệt thay vì tín hiệu dừng.

htop

Được rồi, tôi sẽ thừa nhận. Nó không khác nhiều so với đầu. Ngoại trừ màu sắc.

Làm thế nào để hủy một quy trình trong Linux

dừng lại

Thật nhiều màu sắc.

Tái bút

PS, trạng thái quá trình. Tiện ích gốc đáng yêu của chúng tôi để xem thông tin quy trình trên hệ thống của chúng tôi. Công cụ này đọc từ các tệp trong / proc . Hầu hết các ngày, bạn sẽ sử dụng:

Làm thế nào để hủy một quy trình trong Linux

Tái bút

  • -a , hiển thị các quy trình cho tất cả người dùng
  • -u , chủ sở hữu quy trình hiển thị
  • -x , hiển thị quy trình không được gắn với thiết bị đầu cuối

Đang chạy ps -aux Một mình bạn sẽ mang lại cho bạn mọi thứ và bất cứ thứ gì, nhưng điều này hiếm khi hữu ích. Chúng ta hãy tìm kiếm và tìm kiếm khí lực đã mất của chúng ta.

Làm thế nào để hủy một quy trình trong Linux

lệnh ps-aux

Và nó đây! Bạn cũng sẽ thấy lệnh grep hiện tại của mình trong đó. Nếu bạn không muốn điều đó, hãy thay đổi grep a smidge của bạn.

Làm thế nào để hủy một quy trình trong Linux

lệnh ps-aux với grep

Ở đó. Bây giờ hãy tìm vim , nhưng không cho chúng tôi thấy quy trình grep tìm kiếm vim . Bây giờ hãy giết quá trình. Chúng ta sẽ bắt đầu với killall và sau đó thử giết .

Giết một quy trình (Killall &Kill)

Được rồi, chúng tôi có những gì chúng tôi cần. Tên quy trình ( vim ) và ID quy trình (140464). killall sử dụng tên và giết sử dụng ID quy trình. Mỗi tín hiệu gửi cùng một bộ tín hiệu: HUP , INT , GIẾT , HẠN DỪNG là phổ biến nhất. Nếu bạn muốn tìm hiểu thêm, hãy kiểm tra danh sách với kill -l .

Làm thế nào để hủy một quy trình trong Linux

lệnh kill -l

Hãy cùng tìm hiểu các tín hiệu phổ biến:

  • HÚT , Giá trị tín hiệu 1. Cúp máy. Một thuật ngữ ngày tháng vẫn tồn tại kể từ các dòng điện thoại và modem. Việc treo máy trong hầu hết các hệ thống sẽ khiến daemon khởi động lại thay vì kết thúc.
  • INT , Giá trị tín hiệu 2. Ngắt. Thông thường, khi tương tác với một tiến trình, bạn có thể gửi CTRL + C để ngắt. Gửi kill -2 chạy cùng một tín hiệu ngắt.
  • GIẾT , Giá trị tín hiệu 9. Giết. Đây là những gì chúng tôi thường tìm kiếm. Điều này sẽ giết chết PID ngay lập tức.
  • HẠN , Giá trị Tín hiệu 15. Chấm dứt. Đây là hành vi bình thường cho một quá trình kết thúc. Nếu bạn muốn tử tế với một quá trình, đây là cách bạn muốn kết thúc nó một cách duyên dáng. Theo mặc định, kill gửi tín hiệu 15.
  • DỪNG LẠI , Giá trị Tín hiệu 17, 19, 23. Điều này tạm dừng một quá trình. Giả sử bạn đang sao chép một thư mục lớn và nhận ra rằng bạn muốn xóa một số thư mục. Gửi SIGSTOP, xóa các thư mục và tiếp tục với SIGCONT.

Được rồi, tôi đã thêm các giá trị tín hiệu. Đó là giá trị số của một tín hiệu và có thể được sử dụng trong kill của bạn thay vì gõ SIGHUP. Ví dụ:

  • killall -9 vim

Sẽ cố gắng giết tất cả mọi thứ có tên vim. Tôi khuyên bạn rằng bất cứ khi nào bạn đang sử dụng killall, hãy xác minh rằng sau đó quy trình của bạn đã được kết thúc thành công.

Làm thế nào để hủy một quy trình trong Linux

killall -9 vim

Nếu còn bất cứ thứ gì, hãy giết theo cách thủ công với kill -9 theo sau là id quy trình. ví dụ:

  • giết -9 140464

Kết luận

Đây rồi, một lời giải thích đơn giản về việc giết chết một quá trình. Bắt đầu với đầu cho các quá trình chạy quá mức. Sử dụng killall với các quy trình đồ họa bị mắc kẹt. Cô lập mọi tàn tích bằng giết . Điều đó sẽ giải quyết phần lớn các vấn đề của bạn.

Khi nghi ngờ, hãy khởi động lại. Thực hiện theo các quy trình thông báo thích hợp trước khi bạn thực hiện. Tìm hiểu thêm các lệnh shell và trau dồi các kỹ năng Linux của bạn.