2010-10-19 50 views

risposta

7

È possibile utilizzare gdb. La domanda ha già una risposta in this thread.

+0

L'uso del debugger per forzare l'esecuzione del codice nel processo di destinazione non è una procedura "bash". – bmargulies

+1

@bmargulies: '(printf 'p dup2 (aperto ("/dev/null ", 1), 1) \ np dup2 (1,2) \ ndetach \ n'; sleep 1) | gdb -p $ my_pid' passa abbastanza bene come shellscript. Certo, 'gdb' non è POSIX, ma poi, non ci sono molti bash-isms :) – Jander

4

No, non c'è, almeno, non proprio in modo affidabile.

Quando un processo è biforcato, ha (almeno) i suoi primi tre descrittori di file disposti dal suo padre prima del fork(), quindi li eredita.

Dopo il fork, senza codice del kernel, non c'è nulla che qualsiasi processo diverso da quel processo possa fare a loro.

OK, beh, quasi niente. Il sistema chiama che i debugger di supporto (ad esempio gdb) possono essere utilizzati per attirare la memoria e forzare le chiamate di funzione in un processo. In una provetta, questo può essere usato per chiudere e riaprire questi flussi. Nella vita reale, non si sa se il processo si svolgerà in uno stato davvero sfortunato quando lo si cattura nel debugger e si risponderà per autoimmolazione se si prova questo.

+0

tosse * gdb * ... tosse * strace *. Cough * Reindirizza STDERR/STDOUT di un processo DOPO che è stato avviato, utilizzando la riga di comando? * Http://stackoverflow.com/questions/593724 :) – SyntaxT3rr0r

+0

@Web kernel della tosse, ma vedo il tuo punto. – bmargulies

+2

+1 per aver sottolineato che questo hackery gdb non è in alcun modo garantito per funzionare correttamente. – Jander

Problemi correlati