2010-10-01 38 views
14

Có thể thay đổi cha mẹ quá trình không?
ví dụ: cha mẹ A có con B tôi có thể làm cha mẹ của B là quá trình Init mà không giết chết A không?thay đổi phụ huynh của quá trình

+0

Bài tập về nhà/bài kiểm tra này có phải không? Bạn đang cố gắng đạt được điều gì? – florin

+0

trong khi làm bài tập về nhà của tôi đây là một câu hỏi đến trong tâm trí của tôi. Tôi cố gắng để thoát khỏi "Zombies" với nhiều cách khác nhau – Aboelnour

Trả lời

13

Không phải từ bên ngoài của quá trình B.

Từ quá trình bên B, bạn có thể gọi ngã ba mà làm cho một bản sao của quá trình của bạn, sau đó để lối ra ban đầu. Khi điều đó xảy ra bản sao mới B2 sẽ không phải là con của A, cha mẹ của nó sẽ được đặt thành 1 (quá trình init).

14

Gọi ptrace(PTRACE_ATTACH, pid, x, y) trong đó pid là pid của B (trong ví dụ) và x và y không quan trọng (có thể đặt chúng thành NULL) sẽ làm cho quá trình gọi là cha mẹ của B cho nhiều mục đích (nhưng không phải tất cả) (với các hạn chế dựa trên ID người dùng của các quy trình, tất nhiên, để giúp bạn không tiếp nhận các quy trình của người khác trừ khi bạn là người chủ).

Sau khi gọi ptrace(PTRACE_ATTACH, đứa trẻ vẫn sẽ nhận được một trong hai bố mẹ ban đầu của nó hoặc của pid init như pid mẹ từ getppid(), nhưng quá trình truy tìm sẽ có thể gọi wait và nhận SIGCHLD từ quá trình B.

Có một rất nhiều thứ đang diễn ra ở đây, vì vậy bạn nên đọc man 2 ptrace và đảm bảo rằng bạn hiểu chi tiết khá tốt.

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