Làm cách nào để kiểm tra xem quá trình python có đang chạy không?

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




True
8

True
9
True
0

True
1

True
2

True
3
True
0
True
1
True
2
True
3
True
0
True
5

đầ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ố 8

Hoạ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




True
6

True
9
True
8

True
1

pip install wmi
0

pip install wmi
1
pip install wmi
2
pip install wmi
3

True
1

pip install wmi
5
pip install wmi
2
pip install wmi
7

True
1

pip install wmi
9

True
2
True
01
True
0
True
03

True
04
True
05
True
3
pip install wmi
2
pip install wmi
2
True
09

True
80
True
81
True
82
True
83
True
84

True
80
pip install wmi
5
pip install wmi
2
True
88

True
80
True
90

True
1

True
05
pip install wmi
5
pip install wmi
2
pip install wmi
2
pip install wmi
7
True
97

_______204____381____382____401

True
84

đầu ra

True
0

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

True
7

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ôi

Ví 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ôi

Ví 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

Chủ Đề