2010-10-19 32 views

Trả lời

7

Có thể sử dụng gdb. Câu hỏi đã được trả lời trong this thread.

+0

Sử dụng trình gỡ rối để buộc mã chạy trong quá trình đích không phải là thủ tục 'bash'. – bmargulies

+1

@bmargulies: '(printf 'p dup2 (mở ("/dev/null ", 1), 1) \ np dup2 (1,2) \ ndetach \ n'; ngủ 1) | gdb -p $ my_pid' chuyển cũng đủ như một shellscript. Cấp, 'gdb' không phải là POSIX, nhưng sau đó, không có nhiều bash-isms :) – Jander

4

Không có, ít nhất, không thực sự đáng tin cậy.

Khi một quá trình được chia nhỏ, nó có (ít nhất) ba bộ mô tả tệp đầu tiên do cha mẹ của nó sắp xếp trước ngã ba(), vì vậy nó kế thừa chúng.

Sau ngã ba, không có mã hạt nhân, không có gì mà quá trình nào khác ngoài quy trình đó có thể thực hiện với chúng.

OK, tốt, hầu như không có gì. Hệ thống gọi các trình gỡ rối hỗ trợ (ví dụ: gdb) có thể được sử dụng để chọc bộ nhớ và thực hiện các cuộc gọi hàm trong một tiến trình. Trong ống nghiệm, điều này có thể được sử dụng để đóng và mở lại các luồng này. Trong cuộc sống thực, không có nói nếu quá trình sẽ ở trong một trạng thái thực sự không may khi bạn bắt nó trong trình gỡ rối, và sẽ trả lời bằng tự thiêu nếu bạn thử điều này.

+0

ho * gdb * ... cough * strace *. Ho * Redirect STDERR/STDOUT của một quá trình SAU KHI nó được bắt đầu, sử dụng dòng lệnh? * Http://stackoverflow.com/questions/593724 :) – SyntaxT3rr0r

+0

@Web ho hạt nhân, nhưng tôi thấy quan điểm của bạn. – bmargulies

+2

+1 để chỉ ra rằng hackdb gdb này là không có cách nào đảm bảo hoạt động chính xác. – Jander

Các vấn đề liên quan