2011-07-27 16 views
18

Có cách nào trên Linux để kiểm tra quy trình chạy daemon Python đang hoạt động không? Đó là, mà không có dụng cụ mã và không chấm dứt nó? Tốt hơn là tôi muốn lấy tên của mô-đun và số dòng trong mô-đun hiện đang chạy.Kiểm tra xem quá trình đang chạy là gì: in dấu vết ngăn xếp của chương trình Python chưa được rút gọn

Các công cụ gỡ lỗi thông thường như strace, pstack và gdb không hữu ích cho mã Python. Hầu hết các khung stack chỉ chứa các hàm từ mã trình thông dịch như PyEval_EvalFrameEx và PyEval_EvalCodeEx, nó không cung cấp cho bạn bất kỳ gợi ý nào có trong tệp .py-thực thi.

Trả lời

2

winpdb cho phép bạn attach to a running python process, nhưng để làm được điều này, bạn phải bắt đầu quá trình python theo cách này:

rpdb2 -d -r script.py 

Sau đó, sau khi thiết lập một mật khẩu:

A password should be set to secure debugger client-server communication. 
Please type a password:mypassword 

bạn có thể khởi động winpdb để Tệp> Đính kèm vào (hoặc Tệp> Tách từ) quy trình.

6

Một số các câu trả lời trong Showing the stack trace from a running Python application được áp dụng trong tình huống này:

+2

Pyrasite hoạt động tuyệt vời, cảm ơn mẹo! – johndodo

+0

no/proc/sys/kernel/yama tồn tại? tại sao – zephor

2

trên các hệ thống POSIX như Linux, bạn có thể sử dụng tốt cũ GDB, xem

Ngoài ra còn có tuyệt vời PyCharm IDE (phiên bản cộng đồng miễn phí có sẵn) có thể đính kèm với ru nning Python quá trình ngay từ bên trong IDE, sử dụng PDB 4 dưới mui xe, hãy xem mục blog này:

0

lptrace làm chính xác điều đó. Nó cho phép bạn đính kèm vào một quy trình Python đang chạy và hiển thị các chức năng hiện đang thực hiện, như strace thực hiện cho các cuộc gọi hệ thống. Bạn có thể gọi nó như sau:

[email protected]:/vagrant$ sudo python lptrace -p $YOUR_PID 
fileno (/usr/lib/python2.7/SocketServer.py:438) 
meth (/usr/lib/python2.7/socket.py:223) 

fileno (/usr/lib/python2.7/SocketServer.py:438) 
meth (/usr/lib/python2.7/socket.py:223) 
... 

Lưu ý rằng nó yêu cầu gdb chạy, không khả dụng trên mọi máy chủ.