Tôi đang tìm kiếm một cách để có được một quy trình không xâm phạm của một quy trình đang chạy trên Linux.
Tôi quen thuộc với gdb gcore
, nhưng nó chỉ có thể chạy khi gdb
được gắn vào quy trình và nó đã dừng để gỡ lỗi. Đối với một bãi chứa lõi lớn có thể có nghĩa là nhiều giây, hoặc thậm chí vài phút, thực thi bị gián đoạn.
Có bất kỳ thay thế không chặn?
Linux hỗ trợ bộ nhớ sao chép, mà nó dựa vào để hỗ trợ fork()
mà không cần exec()
. Vì vậy, tôi đang nghĩ đến một cái gì đó ở cấp độ kernel, trong đó kernel chụp ảnh sao chép khi ghi của các bảng trang quy trình của quá trình đang bị hủy, sau đó ghi lõi ra trong khi tiến trình ban đầu tiếp tục chạy.
Tôi khá chắc chắn rằng tôi có thể sử dụng gdb
để ép buộc một fork()
đứa trẻ sau đó bỏ rơi đứa trẻ trong khi cha mẹ tiếp tục vui vẻ, sau đó wait()
ở trong cha mẹ để gặt con sau khi chấm dứt. Mặc dù vậy, nó lộn xộn và vẫn đòi hỏi hai sự gián đoạn của quá trình cha mẹ, mặc dù ngắn.
Chắc chắn ai đó cần điều này trước đây?