Cách gửi và bắt SIGTERM trong Bash và Python

Cach Gui Va Bat Sigterm Trong Bash Va Python



Trong Linux, các tiến trình giao tiếp với nhau bằng các tín hiệu. Các tín hiệu hoạt động như các ngắt phần mềm thông báo cho các chương trình về các sự kiện hoặc yêu cầu khác nhau. Chẳng hạn, khi một chương trình đang chạy, bạn có thể gửi tín hiệu hủy để thoát khỏi chương trình. Tín hiệu được gửi có thể kích hoạt các hành động khác nhau như dừng thực thi, kết thúc chương trình, tiếp tục thực hiện, v.v.

Khi làm việc với Bash và Python, bạn có thể gửi tín hiệu SIGTERM để kết thúc quá trình đang chạy một cách nhẹ nhàng. Bài đăng này đề cập đến việc gửi và bắt SIGTERM trong Bash và Python.

KÝ HIỆU LÀ GÌ

Các hệ thống Unix có ba loại tín hiệu: hệ thống, thiết bị và tín hiệu do người dùng xác định. Mỗi tín hiệu có một giá trị nguyên. Bạn có thể thực thi tín hiệu bằng cách chỉ định tên hoặc giá trị số nguyên của nó.







SIGTERM là một tín hiệu có giá trị nguyên là 15. Nó được thực thi khi bạn muốn kết thúc nhẹ nhàng một tiến trình đang chạy. Sau đây là cú pháp sử dụng SIGTERM trong Bash:



giết MỤC TIÊU < PID >

hoặc

giết - mười lăm < PID >

Bạn có thể kiểm tra tất cả các tín hiệu khả dụng bằng lệnh sau:



giết -l





Cách gửi và bắt SIGTERM trong Bash và Python

Bạn có thể muốn gửi và bắt SIGTERM bằng Bash và Python trong các trường hợp khác nhau. Khi bạn thực thi chương trình Bash hoặc Python, bạn có thể thực thi tín hiệu SIGTERM để tắt chương trình. Chúng tôi có các ví dụ khác nhau để hiểu cách bạn gửi và nhận SIGTERM trong Bash và Python.

1. Sử dụng Tập lệnh Python

Khi sử dụng Python 1.4 và các phiên bản mới nhất, bạn có thể sử dụng thư viện tín hiệu để gửi và nhận SIGTERM. Nhập thư viện vào chương trình của bạn để xác định cách chương trình của bạn sẽ nắm bắt và phản ứng với các tín hiệu khác nhau. Thư viện tín hiệu cho phép bạn tạo một trình xử lý tín hiệu để báo cáo số nguyên của tín hiệu nhận được. Sau đó, bạn có thể đăng ký tín hiệu đã thu và nhận thông tin về quy trình hiện tại, chẳng hạn như PID của nó. Hãy đưa ra một ví dụ.



Chúng tôi có một tập lệnh Python bắt số nguyên của tín hiệu đã gửi. Hơn nữa, nó bắt được PID của quy trình hiện tại.

Trong hình ảnh sau đây, chúng tôi thực thi tập lệnh Python và có một vòng lặp while thực thi cứ sau vài giây. Trên một thiết bị đầu cuối khác, chúng ta có thể gửi tín hiệu SIGTERM để hủy tiến trình bằng cách chỉ định PID mà chúng ta nhận được khi thực thi tập lệnh Python:

Khi chúng tôi gửi tín hiệu SIGTERM, chúng tôi nhận thấy rằng tập lệnh ngừng thực thi. Đó là bởi vì nó nắm bắt số nguyên tín hiệu. Trong trường hợp này, chúng tôi thực hiện kill -15 cho tín hiệu SIGTERM. Bạn cũng có thể gửi tín hiệu tiêu diệt SIGTERM bằng cách sử dụng từ khóa SIGTERM thay vì giá trị số nguyên của nó. Chúng tôi vẫn nhận được kết quả tương tự.

Bạn cũng có thể thực hiện công việc Python của mình bằng cú pháp sau:

trăn3 < kịch bản/công việc > &

Không giống như phương pháp đầu tiên, khi chúng tôi gửi SIGTERM bằng tùy chọn này, chúng tôi có thể thấy rằng ID công việc được in ra khi công việc bắt đầu thực thi. Sau khi chúng tôi giết nó, chúng tôi nhận được trạng thái 'xong'. SIGTERM có thể được gửi bằng cách chỉ định tên hoặc số nguyên của nó.

2. Sử dụng Bash Script

Bạn có thể sử dụng lệnh “trap” để bắt tín hiệu khi thực thi tập lệnh Bash. Trong ví dụ này, chúng tôi đã thêm lệnh “trap” để bắt tín hiệu SIGTERM. Tập lệnh là một vòng lặp “for” để thực thi lệnh “date” hàng nghìn lần nếu không có tín hiệu SIGTERM nào được gửi đi.

Khi thực thi tập lệnh Bash, bạn có thể gửi tín hiệu SIGTERM bằng cách nhấn nút Ctrl + Z phím bàn phím. Lệnh “trap” bắt tín hiệu đã truyền và vòng lặp “for” sẽ ngừng thực thi. Bạn sẽ nhận được một đầu ra xác nhận rằng công việc đang chạy đã nhận được tín hiệu SIGTERM và đã dừng.

Đó là cách bạn gửi và bắt SIGTERM trong Bash.

Phần kết luận

Bạn có thể gửi các tín hiệu khác nhau để đạt được các mục tiêu khác nhau khi thực hiện một công việc hoặc chương trình. SIGTERM được gửi để dừng chương trình một cách nhẹ nhàng. Đối với Python, bạn cần một trình xử lý tín hiệu để bắt tín hiệu và bạn có thể gửi SIGTERM bằng cách sử dụng lệnh “kill”. Bạn có thể sử dụng lệnh “trap” và các phím bàn phím trên Bash để chụp và gửi tín hiệu SIGTERM. Bài đăng này đã trình bày các ví dụ khác nhau về cách đạt được điều đó một cách chi tiết.