2010-10-01 10 views
14

È possibile modificare un genitore di processo?
ex: genitore A ha Child B posso rendere genitore di B il processo di Init senza uccidere A?modifica genitore di un processo

+0

È questo lavoro/esame gotcha? Cosa stai cercando di ottenere? – florin

+0

mentre facevo i miei compiti questa era una domanda che mi veniva in mente. Cerco di sbarazzarmi di "Zombies" con vari modi – Aboelnour

risposta

13

non dall'esterno del processo B.

Dal processo all'interno B, è possibile chiamare la forcella che fa una copia del vostro processo, poi lasciare l'uscita originale. Quando ciò accade la nuova copia B2 non sarà figlia di A, il suo genitore sarà impostato su 1 (il processo di init).

14

Calling ptrace(PTRACE_ATTACH, pid, x, y) dove pid è il pid di B (nel tuo esempio) e x e y non importa (probabilmente li impostato su NULL) renderà il processo chiamante il genitore di B per molti (ma non tutti) delle finalità (con restrizioni basate sull'ID utente dei processi, ovviamente, per impedirti di rilevare i processi di qualcun altro a meno che tu non sia root).

Dopo aver chiamato ptrace(PTRACE_ATTACH, il bambino sarà ancora ottenere sia il suo genitore originale o di PID init come suo pid genitore da getppid(), ma il processo di tracciamento sarà in grado di chiamare wait e ottenere SIGCHLD dal processo di B.

C'è un molte cose succedono qui, quindi dovresti leggere man 2 ptrace e assicurarti di aver compreso abbastanza bene i dettagli.

Problemi correlati