Trong hệ thống POSIX, tôi muốn xem liệu một quy trình cụ thể (ví dụ như PID 4356) có đang chạy hay không. Sẽ tốt hơn nếu tôi có thể nhận siêu dữ liệu về quy trình đó.Cách dễ nhất để xem liệu một tiến trình với một pid cụ thể có tồn tại trong Python không?
Trả lời
os.waitpid()
có thể được giúp đỡ:
try:
os.waitpid(pid, 0)
except OSError:
running = False
else:
running = True
Một cách để làm điều này để có được thông tin sẽ là:
import commands
output = commands.getstatusoutput("ps -ef | awk '{print $2}' | grep MYPID")
Xem: http://docs.python.org/library/commands.html
Tôi nghĩ:
commands.getoutput(...)
có thể được sử dụng để nhận siêu dữ liệu có sẵn trên dòng 'ps
'. Vì bạn đang sử dụng hệ thống POSIX, tôi tưởng tượng ps
(hoặc tương đương) sẽ có sẵn (ví dụ: prstat
dưới Solaris).
Tốt hơn để sử dụng mô-đun "subprocess" (xem http://docs.python.org/library/subprocess.html#replacing-older-functions-with-the-subprocess-module) –
Đồng ý - bằng cách sử dụng nhiều hơn lên đến -date module sẽ thích hợp hơn. –
Trên Linux ít nhất thư mục/proc có những gì bạn đang tìm kiếm. Về cơ bản, dữ liệu hệ thống từ hạt nhân được biểu diễn dưới dạng thư mục và tệp. Tất cả các thư mục số đều là các chi tiết của các tiến trình. Chỉ cần sử dụng các hàm os python cơ bản để lấy dữ liệu này:
#ls /proc
1 17 18675 25346 26390 28071 28674 28848 28871 29347 590 851 874 906 9621 9655 devices iomem modules ...
#ls /proc/1
auxv cmdline cwd environ exe fd maps mem mounts root stat statm status task wchan
#cat /proc/1/cmdline
init [3]
Thay vì os.waitpid, bạn cũng có thể sử dụng os.kill với tín hiệu 0:
>>> os.kill(8861, 0)
>>> os.kill(12765, 0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 3] No such process
>>>
Edit: cởi mở hơn:
import errno
import os
def pid_exists(pid):
try:
os.kill(pid, 0)
except OSError, e:
return e.errno == errno.EPERM
else:
return True
này hoạt động tốt trên Linux box của tôi. Tôi đã không xác minh rằng "tín hiệu 0" thực sự là Posix, nhưng nó luôn hoạt động trên mọi biến thể Unix mà tôi đã thử.
Cách tiếp cận này hoàn toàn thiếu sót: Trong hầu hết các trường hợp, nó chỉ liệt kê các tiến trình do người dùng của bạn bắt đầu. Khi một mô-đun ủy quyền phi truyền thống đi vào hoạt động, nó sẽ không hoạt động chút nào. – phihag
Tôi không nghĩ nó hoàn toàn thiếu sót. Nó cho bạn biết liệu một quá trình có tồn tại hay không, đó là những gì được yêu cầu. (errno cho phép bạn phân biệt giữa "không tồn tại" và "bạn không được phép".) Mô-đun phi truyền thống có thể phá vỡ bất cứ điều gì, tất nhiên. –
@ liw.fi Chỉ khi quy trình đã được bạn bắt đầu ngay từ đầu. Ít nhất là trên hệ thống của tôi, tôi nhận được lỗi 10 tất cả các thời gian – phihag
Trong một cách cầm tay, bằng cách sử dụng psutil (https://github.com/giampaolo/psutil)
>>> import psutil, os
>>> psutil.pid_exists(342342)
False
>>> psutil.pid_exists(os.getpid())
True
>>>
- 1. Cách nhanh chóng để xác định xem một PID có tồn tại trên (Windows) không?
- 2. Cách tìm hiểu xem một chương trình có bị lỗi với tiến trình con không?
- 3. Làm cách nào để tìm PID cấp cao nhất của một quy trình cụ thể bằng cách sử dụng bash?
- 4. Kiểm tra xem tệp có tồn tại không và liệu tệp có chứa một chuỗi cụ thể
- 5. Làm cách nào để kiểm tra xem một nút XML nhất định có tồn tại không?
- 6. kiểm tra xem tệp có tồn tại trong một thư mục cụ thể
- 7. Cách tốt nhất để xử lý list.index (có thể không tồn tại) trong python?
- 8. Có sử dụng GetProcessesByName hay nhất để kiểm tra xem một tiến trình đang chạy không?
- 9. Tìm xem một chuỗi có tồn tại trong một mảng
- 10. Làm cách nào để xác định liệu một băm git đã có tồn tại trên một nhánh cụ thể?
- 11. lấy pid của tiến trình con
- 12. Cách dễ nhất để tìm hiểu xem hai tệp có khác nhau theo chương trình không?
- 13. Kiểm tra xem Thực thể có tồn tại trong kho dữ liệu công cụ ứng dụng của google hay không.
- 14. vimscript: Cách phát hiện xem tệp cụ thể có tồn tại không?
- 15. Có công cụ nào để khám phá xem cùng một lớp có tồn tại trong nhiều lọ trong classpath không?
- 16. cách kiểm tra xem địa chỉ email cụ thể có tồn tại trong C# không?
- 17. Cách hiệu quả nhất để tìm xem một danh sách lớn có chứa một chuỗi cụ thể (Python)
- 18. Có một công cụ để cho phép kiểm tra các đối tượng .NET trong một tiến trình đang chạy không?
- 19. Làm cách nào để kiểm tra xem một trường có tồn tại hay không trong MongoDB?
- 20. Làm cách nào để kiểm tra xem liệu một thủ tục có tồn tại trong gói không?
- 21. Để tìm xem một cột tồn tại trong khung dữ liệu hay không
- 22. Có cách nào để xác định xem một PID Linux bị tạm dừng hay không?
- 23. Tìm xem chuỗi con có tồn tại trong một chuỗi
- 24. Cách tìm hiểu xem một hình ảnh có tồn tại trong một gói không?
- 25. Django: kiểm tra xem một hình ảnh có tồn tại ở một số url cụ thể không?
- 26. Kiểm tra xem một webservice có tồn tại
- 27. Cách nhanh nhất để xác định xem một hàng có tồn tại bằng cách sử dụng LINQ to SQL không?
- 28. Làm cách nào để kiểm tra xem liệu một khóa trong hồ sơ có tồn tại không?
- 29. Có thể có một trường enum trong một lớp tồn tại với OrmLite không?
- 30. Có thể biết liệu WSAStartup có được gọi trong một tiến trình không?
waitpid chờ đợi cho đến khi thoát trình. Do đó, kết quả luôn là Sai. Ngoài ra, waitpid chỉ có thể được gọi trên các tiến trình con. – phihag