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

How Kill Process Linux



Mỗi hệ điều hành Linux đều có lệnh kill. Mục đích duy nhất của công cụ này là để chấm dứt một quá trình đích. Đây là một công cụ mạnh mẽ làm cho Linux trở nên khá linh hoạt, đặc biệt là trong các lĩnh vực máy chủ và doanh nghiệp, nơi một thay đổi / cập nhật lớn có thể có hiệu lực mà không cần khởi động lại toàn bộ máy. Trong bài viết này, tôi sẽ giới thiệu cách hủy một quy trình bằng cách sử dụng giết chết , pkillkillall .

Giết một quá trình

Để giết một quy trình, chúng tôi sẽ sử dụng một số công cụ: giết chết , pkill , và killall . Tất cả chúng đều hoạt động về cơ bản theo cùng một cách.







Các công cụ này không tự kết thúc quá trình. Thay vào đó, chúng gửi một tín hiệu được chỉ định đến quá trình mục tiêu hoặc các nhóm quá trình. Nếu bạn không chỉ định bất kỳ tín hiệu cụ thể nào, SIGTERM sẽ được gửi làm tín hiệu mặc định. Tuy nhiên, có một số tín hiệu được hỗ trợ, ví dụ: SIGKILL, SIGHUP, v.v.



Đây là cấu trúc lệnh cơ bản cho giết chết , pkillkillall .



$giết chết <signal_or_options> <PID(NS)>
$ pkill<signal_or_options> <process_name>
$killall <Lựa chọn> <process_name>

Bất cứ khi nào có thể, bạn nên sử dụng giết chết .





Giết chết , pkillkillall địa điểm

Kill là lệnh mặc định để kết thúc một tiến trình.



$giết chết --Cứu giúp

Nó được chạy từ thư mục / usr / bin.

$cái mà giết chết

Lợi ích là, nó cũng cho phép truy cập vào pkill, một lệnh khác tương tự như kill cho phép quá trình kết thúc dựa trên tên của chúng.

$pkill--Cứu giúp

$cái màpkill

Một số ứng dụng chạy nhiều quy trình của cùng một tệp thực thi. Nếu bạn muốn kết thúc một số quá trình có cùng tên, hãy sử dụng công cụ killall.

$killall --Cứu giúp

$cái mà killall

Liệt kê tất cả các quy trình đang chạy

Nhiệm vụ đầu tiên là xác định PID (số nhận dạng quy trình) và / hoặc tên quy trình mà bạn muốn chấm dứt. Đối với ví dụ này, tôi sẽ sử dụng Firefox làm quy trình đích để kết thúc. Chạy lệnh sau để liệt kê tất cả các tiến trình đang chạy trên hệ thống.

$ps -ĐẾN

Đối với hầu hết các nhiệm vụ, chúng ta cần biết PID của quá trình đích. Tuy nhiên, trong một số tình huống nhất định, việc sử dụng tên tiến trình sẽ phù hợp hơn.

Nếu bạn biết tên chính xác của quy trình đích, bạn có thể trực tiếp lấy PID bằng cách sử dụng pidof .

$pidof <process_name>

Một công cụ thú vị khác để lấy thông tin về quy trình đích là pgrep. Nó được thiết kế đặc biệt cho mục đích này.

$pgrep<Lựa chọn> <process_name>

Diệt tín hiệu

Bây giờ, chúng ta hãy xem xét các tín hiệu mà các công cụ tiêu diệt hỗ trợ. Đó là một danh sách lớn. Tất nhiên, không phải tất cả chúng đều cần thiết cho mọi tình huống. Trên thực tế, hầu hết các tình huống chỉ cần một số tín hiệu nhỏ.

Đầu tiên, hãy xem danh sách tiêu diệt các hỗ trợ.

$giết chết -NS

Có 2 cách để xác định tín hiệu bạn muốn gửi. Bạn có thể sử dụng tên tín hiệu đầy đủ hoặc giá trị tương đương của nó.

$giết chết-<dấu hiệu> <PID>

Hoặc,

$giết chết-<signal_value> <PID>

Các tín hiệu phổ biến nhất là SIGHUP (1), SIGKILL (9) và SIGTERM (15). Nói chung, SIGTERM là cách mặc định và an toàn nhất để chấm dứt một quá trình đích.

Trong trường hợp pkill, tín hiệu được hỗ trợ cũng giống như kill. Tuy nhiên, trong trường hợp killall, số lượng tín hiệu được hỗ trợ và tên tín hiệu là khác nhau.

$killall -NS

Giết một quá trình

Để kết thúc một quá trình, chúng ta cần PID của quá trình đích đó. Giả sử rằng bạn có PID, hãy chạy lệnh sau để loại bỏ nó.

$giết chết <Lựa chọn> <PID>

Tại đây, kill sẽ gửi tín hiệu mặc định SIGTERM đến (các) PID. Nếu bạn muốn kết thúc nhiều quá trình, hãy đề cập đến tất cả các PID được phân tách bằng dấu cách.

$giết chết <Lựa chọn> <PID_1> <PID_2>

Hãy chỉ định tín hiệu nào bạn muốn gửi đến mục tiêu.

Bạn muốn kết thúc một quá trình chỉ sử dụng tên của nó? Sử dụng pkill.

$pkill<Lựa chọn> <process_name>

Trong một số trường hợp, một ứng dụng cụ thể có thể có quá nhiều tiến trình đang chạy. Việc gõ tất cả các PID đó rất tốn thời gian và mệt mỏi. Trong những tình huống như vậy, chúng tôi sẽ sử dụng công cụ killall. Nó khá giống với kill nhưng nó hoạt động với tên tiến trình.

$killall <Lựa chọn> <process_name>

Ví dụ, khi chạy Firefox, nó bắt đầu một số quá trình. Để giết tất cả chúng cùng một lúc, hãy chạy lệnh này.

$killallfirefox

Bạn muốn chấm dứt tất cả các quy trình đang chạy dưới một người dùng nhất định? Killall có thể làm công việc, không có vấn đề. Hãy cẩn thận khi chạy cái này vì nó có thể làm hỏng hệ thống và tạo ra các vấn đề khác. Sẽ không hiệu quả nếu bạn đang cố gắng chấm dứt các quy trình đang chạy dưới quyền của một người dùng khác có đặc quyền cao hơn.

$killall -u <người sử dụng>

Xung đột quyền

Các đặc điểm vốn có của hệ thống phân cấp người dùng Linux cũng áp dụng khi bạn sắp chấm dứt một ứng dụng. Người dùng không thể chấm dứt các quy trình đang chạy với đặc quyền cao hơn, chỉ những quy trình có đặc quyền bằng / thấp hơn. Hơn nữa, người dùng không thể thao tác các quy trình đang chạy dưới quyền của người dùng khác.

Ví dụ: hãy xem xét lệnh có. Nếu nó được gọi là người dùng hiện tại, nó có thể dễ dàng bị chấm dứt bằng cách sử dụng kill.

$giết chết đúng

Bây giờ, nếu đúng đã chạy dưới nguồn gốc ? Gọi kill vì người dùng hiện tại sẽ không hoạt động.

Tương tự, nếu một quy trình đang chạy dưới quyền người dùng khác, bạn không thể chấm dứt quy trình đó khỏi một tài khoản người dùng khác.

Suy nghĩ cuối cùng

Trong bài viết này, chỉ giới thiệu những điều cơ bản và cách sử dụng phổ biến của các lệnh này. Những công cụ giết người này có khả năng nhiều hơn thế. Để có kiến ​​thức chuyên sâu về khả năng của bất kỳ công cụ nào, tôi khuyên bạn nên xem trang nam.

$Đàn ông giết chết

$Đàn ôngpkill

Thưởng thức!