Bài viết này nói về Cách kiểm tra xem ứng dụng có đang mở trong hệ thống hay không bằng Python. Bạn cũng có thể tham khảo bài viết Python – Lấy danh sách các tiến trình đang chạy để biết thêm thông tin
Trong các cách tiếp cận dưới đây, chúng tôi sẽ kiểm tra xem chrome. exe có mở trong hệ thống của chúng tôi hay không
sử dụng psutil
psutil là một mô-đun sử dụng hệ thống và giám sát hệ thống của python. Nó chủ yếu hữu ích cho việc giám sát hệ thống, lập hồ sơ và giới hạn tài nguyên quy trình cũng như quản lý các quy trình đang chạy. Việc sử dụng các tài nguyên như CPU, bộ nhớ, đĩa, mạng, cảm biến có thể được giám sát. Nó được hỗ trợ trong Python phiên bản 2. 6, 2. 7 và 3. 4+. Bạn có thể cài đặt mô-đun psutil bằng cách sử dụng lệnh sau
pip install psutil
Chúng tôi sẽ sử dụng psutil. process_iter[], nó trả về một trình vòng lặp mang lại một thể hiện của lớp quy trình cho tất cả các quy trình đang chạy trên máy cục bộ
Python3
True8
True9
True0
True1
True2
True3
True0
True1
True2
True3
True0
True5
đầu ra
True
Chúng tôi nhập mô-đun psutil. Sau đó, chúng tôi tìm kiếm chrome. exe trong tất cả các tiến trình đang chạy trên máy cục bộ bằng psutil. process_iter[]. Nếu tìm thấy nó sẽ trả về đầu ra là TRUE, ngược lại là FALSE
Sử dụng WMI [chỉ Người dùng Windows]
Mô-đun wmi có thể được sử dụng để lấy thông tin hệ thống của máy Windows và có thể được cài đặt bằng lệnh bên dưới.
________số 8Hoạt động của nó tương tự như psutil. Tại đây, chúng tôi kiểm tra xem một tên quy trình cụ thể có trong danh sách các quy trình đang chạy hay không
Python3
True6
True9
True8
True1
pip install wmi0
pip install wmi1
pip install wmi2
pip install wmi3
True1
pip install wmi5
pip install wmi2
pip install wmi7
True1
pip install wmi9
True2
True01
True0
True03
True04
True05
True3
pip install wmi2
pip install wmi2
True09
True80
True81
True82
True83
True84
True80
pip install wmi5
pip install wmi2
True88
True80
True90
True1
True05
pip install wmi5
pip install wmi2
pip install wmi2
pip install wmi7
True97
_______204____381____382____401
True84
đầu ra
True0
Chúng tôi nhập mô-đun wmi. Sau đó, chúng tôi tìm kiếm chrome. exe trong tất cả các quy trình đang chạy trên máy cục bộ bằng cách lặp qua các tên quy trình. Nếu phù hợp với quy trình. Tên, nó sẽ in Ứng dụng đang chạy, ngược lại Ứng dụng không chạy
Python là một ngôn ngữ lập trình mạnh mẽ và đang phát triển theo cấp số nhân trong thời đại ngày nay. Có nhiều cách để kiểm tra tập lệnh nào đang chạy trong nền của môi trường Linux. Một trong số họ đang sử dụng mô-đun quy trình con trong python. Quy trình con được sử dụng để chạy các chương trình mới thông qua mã Python bằng cách tạo các quy trình mới. Trong bài viết này, chúng ta sẽ xem cách kiểm tra bất kỳ tập lệnh nào đang chạy trong nền Linux bằng Python
Yêu cầu
- Trăn >=2. 7, >= 3. 0
- píp
Cài đặt quy trình con
True7
Chúng tôi sẽ sử dụng quy trình con. checkout[] để lấy tất cả các tiến trình đang chạy
cú pháp. quy trình con. check_output[args, *, stdin=Không, stderr=Không, shell=Sai, cwd=Không, mã hóa=Không, lỗi=Không, universal_newlines=Không, hết thời gian chờ=Không, văn bản=Không, **other_popen_kwargs]
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
Một ví dụ về đa xử lý. Lớp quy trình cung cấp một xử lý của quy trình Python. Như vậy, nó cung cấp các thuộc tính mà chúng ta có thể sử dụng để truy vấn các thuộc tính và trạng thái của quy trình cơ bản
Làm cách nào chúng ta có thể truy vấn các thuộc tính của một hệ thống đa xử lý. Quá trình ví dụ?
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 truy vấn các thuộc tính của quy trình
đa xử lý. Lớp quy trình cung cấp các thuộc tính thể hiện có thể được sử dụng để truy vấn trạng thái của quy trình
Điều này bao gồm các truy vấn như tên quy trình và liệu quy trình hiện đang hoạt động hay không
Sau đây cung cấp một danh sách đa xử lý. Các thuộc tính xử lý mà chúng ta có thể truy vấn
- Tên. Nhận hoặc đặt tên của quy trình
- yêu tinh. Nhận hoặc đặt quy trình có phải là quy trình daemon hay không
- pid. Nhận mã định danh quy trình, sau khi bắt đầu
- mã thoát. Nhận mã thoát cho quy trình, sau khi quá trình kết thúc
- mã xác thực. Nhận khóa xác thực cho một quy trình
- lính gác. Nhận đối tượng sentinel cho một quá trình
- is_alive[]. Kiểm tra xem quá trình hiện đang chạy
Chỉ có thể truy cập [truy xuất] và đặt [gán] thuộc tính “tên” và “daemon” sau quá trình đa xử lý. Quá trình đã được khởi tạo. Không thể thay đổi thuộc tính “daemon” sau khi đã gọi hàm start[] để chạy luồng
Thuộc tính “pid” là chỉ đọc và trả về giá trị nguyên dương sau khi quá trình bắt đầu. Thuộc tính “exitcode” là chỉ đọc và trả về một giá trị số nguyên sau khi quá trình kết thúc
Hàm “is_alive[]” [không phải là một thuộc tính] trả về một giá trị boolean về việc đọc có đang thực thi hàm run[] của nó hay không, e. g. chạy hay không
Bây giờ chúng ta đã quen thuộc với cách truy vấn trạng thái của một quy trình, hãy xem xét một số ví dụ
Bối rối với API mô-đun đa xử lý?
Tải xuống bảng cheat PDF MIỄN PHÍ của tôiVí dụ về tên quy trình truy vấn
Mỗi tiến trình có một tên
Tiến trình cha có tên là “MainProcess“
Các quy trình con được đặt tên tự động theo cách hơi độc đáo trong mỗi quy trình có dạng “Quy trình-%d” trong đó %d là số nguyên biểu thị số quy trình được tạo bởi quy trình cha, e. g. Quy trình-1 cho quy trình đầu tiên được tạo
Chúng ta có thể truy cập tên của một quá trình thông qua multiprocessing. Quá trình. thuộc tính tên, ví dụ
1
2
3
.. .
# báo cáo tên quy trình
in[quy trình. tên]
Ví dụ dưới đây tạo một thể hiện của đa xử lý. Lớp quy trình và báo cáo tên mặc định của quy trình
1
2
3
4
5
6
7
8
9
#Trăn Siêu Nhanh. com
# ví dụ về truy cập tên tiến trình con
từ đa xử lý nhập Quy trình
# điểm vào
if __name__ == '__main__'.
# tạo quy trình
quy trình = Quy trình[]
# báo cáo tên quy trình
in[quy trình. tên]
Chạy ví dụ này sẽ tạo một quy trình con và báo cáo tên mặc định được gán cho quy trình
1
Quy trình-1
Khóa học đa xử lý Python miễn phí
Tải xuống bảng cheat API đa xử lý của tôi và như một phần thưởng, bạn sẽ nhận được quyền truy cập MIỄN PHÍ vào khóa học email 7 ngày của tôi
Khám phá cách sử dụng mô-đun đa xử lý Python, bao gồm cách tạo và bắt đầu các tiến trình con cũng như cách sử dụng khóa mutex và semaphores
Tìm hiểu thêm
Ví dụ về Daemon quy trình truy vấn
Một tiến trình có thể là một daemon
Quy trình daemon là tên được đặt cho quy trình nền. Theo mặc định, các quy trình không phải là quy trình daemon vì chúng kế thừa giá trị daemon từ quy trình mẹ, giá trị này được đặt là Sai cho MainProcess
Một quy trình cha Python sẽ chỉ thoát khi tất cả các quy trình không phải daemon đã hoàn tất việc thoát. Ví dụ: MainProcess là một quy trình không phải daemon. Điều này có nghĩa là quá trình trình nền có thể chạy trong nền và không cần phải kết thúc hoặc được kích hoạt rõ ràng để chương trình kết thúc
Chúng ta có thể xác định xem một quy trình có phải là quy trình daemon hay không thông qua tính năng đa xử lý. Quá trình. thuộc tính daemon
1
2
3
.. .
# báo cáo thuộc tính daemon
in[quy trình. daemon]
Ví dụ tạo một thể hiện của đa xử lý. Lớp quy trình và báo cáo xem quy trình có phải là daemon hay không
1
2
3
4
5
6
7
8
9
#Trăn Siêu Nhanh. com
# ví dụ về việc đánh giá liệu một tiến trình có phải là daemon hay không
từ đa xử lý nhập Quy trình
# điểm vào
if __name__ == '__main__'.
# tạo quy trình
quy trình = Quy trình[]
# báo cáo thuộc tính daemon
in[quy trình. daemon]
Chạy ví dụ báo cáo rằng quy trình không phải là quy trình daemon, mặc định cho các quy trình con mới
1
Sai
Choáng ngợp trước các API đồng thời của python?
Để tìm sự giải thoát, hãy tải xuống Bản đồ tư duy về đồng thời Python MIỄN PHÍ của tôiVí dụ về quy trình truy vấn PID
Mỗi quy trình có một mã định danh quy trình duy nhất, được gọi là PID, được chỉ định bởi hệ điều hành
Các quy trình Python là các quy trình gốc thực sự, nghĩa là mỗi quy trình chúng tôi tạo thực sự được tạo và quản lý bởi hệ điều hành bên dưới. Như vậy, hệ điều hành sẽ gán một số nguyên duy nhất cho mỗi luồng được tạo trên hệ thống [trên các quy trình]
Định danh quy trình có thể được truy cập thông qua đa xử lý. Quá trình. thuộc tính pid và được chỉ định sau khi quá trình bắt đầu
1
2
3
.. .
# báo cáo pid
in[quy trình. pid]
Ví dụ dưới đây tạo một thể hiện của một bộ đa xử lý. Xử lý và báo cáo PID được giao
1
2
3
4
5
6
7
8
9
10
11
12
13
#Trăn Siêu Nhanh. com
# ví dụ về báo cáo mã định danh quy trình gốc
từ đa xử lý nhập Quy trình
# điểm vào
if __name__ == '__main__'.
# tạo quy trình
quy trình = Quy trình[]
# báo cáo số nhận dạng quy trình
in[quy trình. pid]
# bắt đầu quá trình
quy trình. bắt đầu[]
# báo cáo số nhận dạng quy trình
in[quy trình. pid]
Trước tiên, chạy ví dụ sẽ tạo quy trình và xác nhận rằng quy trình không có PID riêng trước khi bắt đầu
Quá trình sau đó được bắt đầu và PID được chỉ định được báo cáo
Lưu ý, PID của bạn sẽ khác vì quy trình sẽ có một mã định danh khác nhau mỗi khi mã được chạy
1
2
Không có
16302
Ví dụ về quá trình truy vấn Alive
Một thể hiện của tiến trình có thể còn sống hoặc đã chết
Một tiến trình còn sống có nghĩa là phương thức run[] của đa xử lý. Phiên bản quy trình hiện đang thực thi
Điều này có nghĩa là trước khi phương thức start[] được gọi và sau khi phương thức run[] hoàn thành, tiến trình sẽ không hoạt động
Chúng ta có thể kiểm tra xem một tiến trình có còn hoạt động hay không thông qua đa xử lý. Quá trình. phương thức is_alive[]
1
2
3
.. .
# báo cáo quá trình đang hoạt động
in[quy trình. is_alive[]]
Ví dụ dưới đây tạo ra một multiprocessing. Phiên bản xử lý sau đó kiểm tra xem nó còn sống không
1
2
3
4
5
6
7
8
9
#Trăn Siêu Nhanh. com
# ví dụ về việc đánh giá liệu một quá trình có tồn tại hay không
từ đa xử lý nhập Quy trình
# điểm vào
if __name__ == '__main__'.
# tạo quy trình
quy trình = Quy trình[]
# báo cáo quá trình đang hoạt động
in[quy trình. is_alive[]]
Chạy ví dụ này sẽ tạo ra một bộ đa xử lý mới. Phiên bản quy trình sau đó báo cáo rằng quy trình không còn hoạt động
1
Sai
Chúng tôi có thể cập nhật ví dụ để quy trình ngủ trong giây lát và sau đó báo cáo trạng thái hoạt động của quy trình trong khi nó đang chạy
Điều này có thể đạt được bằng cách đặt đối số "mục tiêu" thành đa xử lý. Quá trình thực thi chức năng tùy chỉnh ngủ trong một giây
Đầu tiên, chúng ta có thể định nghĩa hàm
1
2
3
# chức năng để thực hiện trong một quy trình mới
def nhiệm vụ[].
ngủ[1]
Sau đó, chúng ta có thể tạo một phiên bản quy trình mới và định cấu hình nó để thực thi chức năng của mình trong một luồng mới
1
2
3
.. .
#tạo quy trình
quy trình = Quy trình[mục tiêu=task]
Sau đó, chúng ta có thể bắt đầu quá trình bằng cách gọi hàm start[] và báo cáo trạng thái hoạt động của quá trình khi nó đang chạy
1
2
3
4
5
.. .
# bắt đầu quá trình
quy trình. bắt đầu[]
# báo cáo quá trình đang hoạt động
in[quy trình. is_alive[]]
Cuối cùng, chúng ta có thể đợi quá trình kết thúc và báo cáo trạng thái của quá trình sau đó
1
2
3
4
5
.. .
# đợi quá trình kết thúc
quy trình. tham gia[]
# báo cáo quá trình đang hoạt động
in[quy trình. is_alive[]]
Liên kết điều này lại với nhau, ví dụ hoàn chỉnh về việc kiểm tra trạng thái hoạt động của một quy trình khi nó đang chạy được liệt kê bên dưới
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#Trăn Siêu Nhanh. com
# ví dụ về việc đánh giá xem một tiến trình đang chạy có tồn tại hay không
từ thời gian nhập ngủ
từ đa xử lý nhập Quy trình
# chức năng để thực hiện trong một quy trình mới
def nhiệm vụ[].
ngủ[1]
# điểm vào
if __name__ == '__main__'.
# tạo quy trình
quy trình = Quy trình[target=task]
# báo cáo quá trình đang hoạt động
in[quy trình. is_alive[]]
# bắt đầu quá trình
quy trình. bắt đầu[]
# báo cáo quá trình đang hoạt động
in[quy trình. is_alive[]]
# chờ quá trình hoàn tất
quy trình. tham gia[]
# báo cáo quá trình đang hoạt động
in[quy trình. is_alive[]]
Chạy ví dụ này sẽ tạo ra thể hiện quy trình và xác nhận rằng nó không tồn tại trước khi hàm start[] được gọi
Quá trình sau đó được bắt đầu và bị chặn trong một giây, trong khi đó chúng tôi kiểm tra trạng thái còn hoạt động trong quy trình gốc được báo cáo là Đúng, luồng đang hoạt động
Quá trình kết thúc và trạng thái hoạt động được báo cáo lại, cho thấy rằng thực sự quá trình không còn hoạt động
1
2
3
Sai
ĐÚNG VẬY
Sai
Ví dụ về mã thoát quy trình truy vấn
Một tiến trình con sẽ có một mã thoát sau khi nó kết thúc
Mã thoát cung cấp chỉ báo về việc các quy trình có hoàn thành thành công hay không và nếu không, loại lỗi xảy ra gây ra việc chấm dứt
Các mã thoát phổ biến bao gồm
- 0. Bình thường [thoát thành công]
- 1. Lỗi [thoát không thành công]
Chúng ta có thể viết mã thoát cho một tiến trình con thông qua đa xử lý. Quá trình. thuộc tính mã thoát
1
2
3
.. .
# báo cáo mã thoát quy trình
in[quy trình. mã thoát]
Một quy trình sẽ không có mã thoát cho đến khi quy trình kết thúc. Điều này có nghĩa là, kiểm tra mã thoát của một quy trình trước khi nó bắt đầu hoặc trong khi nó đang chạy sẽ trả về giá trị Không có
Chúng ta có thể chứng minh điều này bằng một ví dụ đã hoạt động thực thi chức năng mục tiêu tùy chỉnh chặn trong một giây
Trước tiên, chúng tôi tạo một phiên bản quy trình mới để thực thi hàm task[] của chúng tôi, báo cáo mã thoát, sau đó bắt đầu quy trình và báo cáo mã thoát trong khi quy trình đang chạy
1
2
3
4
5
6
7
8
9
.. .
#tạo quy trình
quy trình = Quy trình[mục tiêu=task]
# báo cáo trạng thái thoát
in[quy trình. mã thoát]
# bắt đầu quá trình
quy trình. bắt đầu[]
# báo cáo trạng thái thoát
in[quy trình. mã thoát]
Sau đó chúng ta có thể block cho đến khi tiến trình con kết thúc thì báo mã thoát
1
2
3
4
5
.. .
# đợi quá trình kết thúc
quy trình. tham gia[]
# báo cáo trạng thái thoát
in[quy trình. mã thoát]
Liên kết điều này lại với nhau, ví dụ hoàn chỉnh được liệt kê bên dưới
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#Trăn Siêu Nhanh. com
# ví dụ kiểm tra trạng thái thoát của tiến trình con
từ thời gian nhập ngủ
từ đa xử lý nhập Quy trình
# chức năng để thực hiện trong một quy trình mới
def nhiệm vụ[].
ngủ[1]
# điểm vào
if __name__ == '__main__'.
# tạo quy trình
quy trình = Quy trình[target=task]
# báo cáo trạng thái thoát
in[quy trình. mã thoát]
# bắt đầu quá trình
quy trình. bắt đầu[]
# báo cáo trạng thái thoát
in[quy trình. mã thoát]
# chờ quá trình hoàn tất
quy trình. tham gia[]
# báo cáo trạng thái thoát
in[quy trình. mã thoát]
Trước tiên, chạy ví dụ sẽ tạo một quy trình mới để thực thi chức năng tác vụ tùy chỉnh của chúng tôi
Mã trạng thái của quy trình con được báo cáo, không như mong đợi. Quá trình được bắt đầu và bị chặn trong một giây. Trong khi chạy, mã thoát lại được báo cáo, một lần nữa là Không như mong đợi
Tiến trình cha sau đó chặn cho đến khi tiến trình con kết thúc. Mã thoát được báo cáo và trong trường hợp này, chúng ta có thể thấy rằng giá trị bằng 0 được báo cáo cho biết thoát bình thường hoặc thành công
1
2
3
Không có
Không có
0
Mã thoát cho một quy trình có thể được đặt bằng cách gọi sys. exit[] và chỉ định một giá trị số nguyên, chẳng hạn như 1 cho lần thoát không thành công
Chúng tôi có thể chứng minh điều này bằng một ví dụ đã hoạt động trong đó chức năng task[] tùy chỉnh của chúng tôi thoát với lỗi
Hàm task[] được cập nhật với thay đổi này được liệt kê bên dưới
1
2
3
4
5
6
# chức năng để thực hiện trong một quy trình mới
def nhiệm vụ[].
# khối trong giây lát
ngủ[1]
# lần thoát có lỗi
sys. thoát[1]
Sau đó, chúng tôi có thể tạo và bắt đầu quá trình và đợi nó kết thúc
1
2
3
4
5
6
7
.. .
#tạo quy trình
quy trình = Quy trình[mục tiêu=task]
# bắt đầu quá trình
quy trình. bắt đầu[]
# đợi quá trình kết thúc
quy trình. tham gia[]
Sau khi chấm dứt, chúng tôi có thể báo cáo mã thoát
1
2
3
.. .
# báo cáo trạng thái thoát
in[quy trình. mã thoát]
Liên kết điều này lại với nhau, ví dụ hoàn chỉnh được liệt kê bên dưới
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#Trăn Siêu Nhanh. com
# ví dụ kiểm tra trạng thái thoát của tiến trình con
từ thời gian nhập ngủ
từ đa xử lý nhập Quy trình
nhập sys
# chức năng để thực hiện trong một quy trình mới
def nhiệm vụ[].
# khối trong giây lát
ngủ[1]
# lần thoát có lỗi
sys. thoát[1]
# điểm vào
if __name__ == '__main__'.
# tạo quy trình
quy trình = Quy trình[target=task]
# bắt đầu quá trình
quy trình. bắt đầu[]
# chờ quá trình hoàn tất
quy trình. tham gia[]
# báo cáo trạng thái thoát
in[quy trình. mã thoát]
Chạy ví dụ đầu tiên sẽ tạo và bắt đầu quy trình mới
Quá trình con bị chặn trong giây lát, sau đó thoát ra với trạng thái lỗi
Tiến trình cha chặn cho đến khi tiến trình con kết thúc, sau đó báo mã thoát, trường hợp này là 1 biểu thị lỗi