Tôi có một tập lệnh python đang sử dụng lệnh SIGSTOP và .SIGCONT với os.kill để tạm dừng hoặc tiếp tục quá trình. Có cách nào để xác định xem PID có liên quan ở trạng thái tạm dừng hoặc tiếp tục không?Có cách nào để xác định xem một PID Linux bị tạm dừng hay không?
Trả lời
Bạn có thể tìm thông tin về quy trình từ thư mục/proc của nó (/proc/<PID>
). Cụ thể, bạn có thể tìm thấy tình trạng chạy của nó với các biểu hiện này python:
open(os.path.join('/proc', str(pid), 'stat')).readline().split()[2]=='T'
EDIT: biểu hiện tiếp theo này sửa chữa một lỗi (có lẽ hiếm) với bản gốc:
re.sub(r'\(.*\)', '()', open(os.path.join('/proc', str(pid), 'stat')).readline()).split()[2]=='T'
gọi ps và kiểm tra giá trị STAT. D Giấc ngủ không gián đoạn (thường là IO) R Chạy hoặc chạy được (trên hàng đợi) S Giấc ngủ gián đoạn (chờ một sự kiện hoàn thành) T Ngừng, hoặc bằng tín hiệu điều khiển công việc hoặc vì nó đang được truy tìm. Phân trang W (không hợp lệ kể từ hạt nhân 2.6.xx) X chết (không bao giờ được nhìn thấy) Quy trình không tồn tại ("zombie") bị chấm dứt nhưng không bị cha mẹ của nó gặt hái.
Cảm ơn bạn, tôi đã sử dụng ps axo fname, stat, pid và hoạt động giống như bạn đã nói, tôi không biết giá trị STAT là cho điều đó. – CobraBytez
Bạn có thể sử dụng psuti l:
>>> import psutil
>>> pid = 1243
>>> p = psutil.Process(pid)
>>> p.status
0
>>> str(p.status)
'running'
>>> p.status == psutil.STATUS_RUNNING
True
>>>
>>> p.suspend()
>>> p.status
3
>>> str(p.status)
'stopped'
>>> p.status == psutil.STATUS_STOPPED
True
>>>
>>> p.resume()
>>> str(p.status)
'running'
>>>
Không sử dụng os.path.join! ... đợi đã, đây là câu hỏi Linux thuần túy. – janislaw
@janislaw - cảm ơn. –