Tôi muốn bỏ lõi của một tiến trình đang chạy, theo /proc/<pid>/status
, hiện đang chặn hoạt động của đĩa. Trên thực tế, nó đang bận rộn làm việc trên GPU (nên được 4 giờ làm việc, nhưng nó đã mất nhiều thời gian hơn bây giờ). Tôi muốn biết có bao nhiêu công việc của quá trình đã được thực hiện, do đó, nó sẽ là tốt để có thể đổ bộ nhớ của quá trình. Tuy nhiên, theo như tôi biết, "chặn hoạt động trên đĩa" có nghĩa là không thể làm gián đoạn quá trình theo bất kỳ cách nào và coredumping quy trình, ví dụ: sử dụng gdb yêu cầu gián đoạn và tạm thời dừng quá trình để đính kèm qua ptrace, phải không?Tôi có thể coredump một quá trình đang chặn hoạt động đĩa (tốt nhất là không giết nó)?
Tôi biết rằng tôi chỉ có thể đọc /proc/<pid>/{maps,mem}
làm gốc để nhận trạng thái bộ nhớ (có thể không nhất quán), nhưng tôi không biết cách nào để giữ các giá trị đăng ký CPU của người dùng ... quá trình là bên trong hạt nhân, phải không?
bạn có thể thêm bản in của sổ đăng ký mỗi nửa giờ trong mã nguồn của bạn .... – 0x90
Tất nhiên, tôi sẽ vui hơn về giải pháp làm sẵn hơn là phải cuộn nhà sản xuất coredump của riêng tôi. :( – thejh
@ 0x90 đúng, nhưng tôi muốn có thể làm điều này với một chương trình đã chạy vì tôi không muốn mất ~ 9h dữ liệu được tính bằng cách khởi động lại hoặc chờ một khoảng thời gian không xác định điều này để hoàn thành (nếu nó không bị mắc kẹt ở đâu đó.), "mỗi nửa giờ" sẽ không làm điều đó - bạn phải luôn luôn làm điều đó trước khi nhập một phương pháp có thể (hoặc sẽ) chặn trên "đĩa IO "trong một khoảng thời gian kéo dài – thejh