Bạn có thể lấy một quy trình theo tên bằng cách tìm kiếm trong tất cả các quy trình con đang hoạt động để tìm một quy trình có tên đã cho
Trong hướng dẫn này, bạn sẽ khám phá cách lấy một quy trình theo tên trong Python
Bắt đầu nào
Mục lục
Cần lấy một quy trình theo tên
Một tiến trình là một thể hiện đang chạy của một chương trình máy tính
Mỗi chương trình Python được thực thi trong một Quy trình, đây là phiên bản mới của trình thông dịch Python. Quá trình này có tên MainProcess và có một luồng được sử dụng để thực hiện các hướng dẫn của chương trình được gọi là MainThread. Cả quy trình và luồng đều được tạo và quản lý bởi hệ điều hành bên dưới
Đôi khi chúng ta có thể cần tạo các tiến trình con mới trong chương trình của mình để thực thi mã đồng thời
Python cung cấp khả năng tạo và quản lý các quy trình mới thông qua cơ chế đa xử lý. lớp quy trình
Bạn có thể tìm hiểu thêm về đa xử lý trong hướng dẫn
- Đa xử lý trong Python. Hướng dẫn hoàn chỉnh
Trong đa xử lý, chúng ta có thể cần lấy một quy trình theo tên
Điều này có thể vì nhiều lý do, chẳng hạn như
- Chúng tôi không có pid của quá trình
- Báo cáo chi tiết quá trình
- Gửi tín hiệu tới quy trình, chẳng hạn như SIGKILL để tiêu diệt nó
Làm thế nào chúng ta có thể nhận được một quá trình theo tên?
Chạy các vòng lặp của bạn bằng cách sử dụng tất cả các CPU, tải xuống cuốn sách MIỄN PHÍ của tôi để tìm hiểu cách thực hiện
Cách lấy quy trình theo tên
Thư viện chuẩn Python không cung cấp cơ chế tìm kiếm thông qua các quy trình theo tên
Thay vào đó, chúng ta có thể tự phát triển chức năng này
Trong phần này, chúng ta sẽ khám phá cách chúng ta có thể tìm kiếm một quy trình theo tên của nó
Tên quy trình
Các quy trình Python có tên
Chúng có thể truy cập thông qua thuộc tính tên trên đa xử lý. Ví dụ lớp quy trình cho quy trình
Ví dụ
1
2
3
.. .
# lấy tên quy trình
tên = quy trình. tên
Tên quy trình không phải là duy nhất
Tên mặc định được gán cho các quy trình cố gắng là duy nhất, e. g. Quy trình-1, Quy trình-2, v.v. Tên của các quy trình có thể được thay đổi bất cứ lúc nào bởi chính quy trình đó hoặc quy trình khác
Bạn có thể tìm hiểu thêm về tên quy trình trong hướng dẫn
- Cách thay đổi tên quy trình trong Python
Như vậy, chúng ta không thể dựa vào tên của một quá trình nói chung là duy nhất
Tuy nhiên, trong ứng dụng của mình, chúng tôi có thể gán các tên riêng biệt và có ý nghĩa cho các quy trình. Những tên này sau đó có thể được sử dụng duy nhất
Liệt kê các quy trình
Để có được một quy trình theo tên, chúng ta cần có thể có được một danh sách tất cả các quy trình, sau đó tìm kiếm thông qua chúng
Trong Python, chúng tôi không thể trực tiếp lấy danh sách tất cả các quy trình
Thay vào đó, chúng ta có thể lấy danh sách tất cả các tiến trình con đang hoạt động cho tiến trình cha hiện tại
Điều này có sẵn thông qua
Ví dụ
1
2
3
.. .
# lấy tất cả các tiến trình con
quy trình = đa xử lý. active_children[]
Tìm kiếm quá trình
Khi chúng tôi có một danh sách các quy trình đang hoạt động, chúng tôi có thể tìm kiếm một quy trình có tên đã cho
Điều này có thể đạt được bằng cách lặp qua danh sách các quy trình và kiểm tra tên của từng quy trình với tên được cung cấp
Ví dụ
1
2
3
4
5
6
.. .
# tìm một tiến trình có tên
cho quy trình trong quy trình.
# kiểm tra xem có trùng khớp
nếu xử lý. tên == tên.
#.
Sau khi tìm thấy, chúng ta có thể thực hiện một số hành động, chẳng hạn như
- Trả lại quá trình với tên
- Truy xuất thông tin chi tiết của quy trình, chẳng hạn như pid
- Gửi tín hiệu đến quá trình
Bây giờ chúng ta đã biết cách tìm kiếm một quy trình theo tên của nó, hãy xem một số ví dụ đã hoạt động
Bị bối rối bởi API mô-đun đa xử lý?
Tải xuống bảng cheat PDF MIỄN PHÍ của tôi
Nhận một tiến trình con theo tên
Chúng ta có thể khám phá cách lấy một phiên bản quy trình theo tên
Trong ví dụ này, chúng tôi sẽ bắt đầu một bộ quy trình con sẽ chặn tất cả trong một thời gian. Quá trình mẹ sau đó sẽ tìm kiếm một quá trình theo tên của nó và báo cáo tất cả các chi tiết của nó
Đầu tiên, chúng ta có thể phát triển chức năng được sử dụng để tìm kiếm một quy trình theo tên
Hàm lấy tên của tên quy trình để tìm kiếm
1
2
3
# trả về tiến trình con có tên hoặc không
def get_process_by_name[tên]:
#
Đầu tiên, chúng ta có thể lấy danh sách tất cả các tiến trình con đang hoạt động cho tiến trình cha hiện tại
1
2
3
.. .
# lấy tất cả các tiến trình con
quy trình = active_children[]
Tiếp theo, chúng ta có thể lặp lại danh sách các phần tử con đang hoạt động và kiểm tra xem tên của quy trình có khớp với tên được cung cấp không. Nếu vậy, chúng ta có thể trả lại phiên bản quy trình
1
2
3
4
5
6
.. .
# trả lại tiến trình với tên
cho quy trình trong quy trình.
# kiểm tra xem có trùng khớp
nếu xử lý. tên == tên.
trả lại quy trình
Nếu không, chúng tôi sẽ trả về giá trị Không, để cho biết rằng không tìm thấy quy trình nào có tên
1
2
3
.. .
# không có trận đấu
trả lại Không có
Kết hợp điều này lại với nhau, hàm kill_child_process_by_name[] hoàn chỉnh với những thay đổi này được liệt kê bên dưới