Voglio eseguire il dump del core di un processo in esecuzione che, in base allo /proc/<pid>/status
, blocca attualmente sull'attività del disco. In realtà, è impegnato a lavorare sulla GPU (dovrebbe essere 4 ore di lavoro, ma ora ha impiegato molto più tempo). Mi piacerebbe sapere quanta parte del processo è stato svolto, quindi sarebbe bello poter scaricare la memoria del processo. Tuttavia, per quanto ne so, "bloccare l'attività del disco" significa che non è possibile interrompere il processo in alcun modo e correggere un processo, ad es. l'utilizzo di gdb richiede l'interruzione e l'interruzione temporanea del processo al fine di collegarsi tramite ptrace, giusto?È possibile eseguire il backup di un processo che blocca l'attività del disco (preferibilmente senza eliminarlo)?
So che potrei semplicemente leggere /proc/<pid>/{maps,mem}
come root per ottenere lo stato (forse incoerente) della memoria, ma non conosco alcun modo per ottenere i valori del registro CPU dello spazio utente del processo ... rimangono gli stessi mentre il processo è all'interno del kernel, giusto?
è possibile aggiungere la stampa dei registri ogni mezz'ora nel codice sorgente .... – 0x90
Ovviamente, sarei molto più felice di una soluzione già pronta piuttosto che dover eseguire il rollup del mio creatore di file. :( – thejh
@ 0x90 giusto, ma mi piacerebbe essere in grado di fare questo a un programma già in esecuzione perché non voglio perdere ~ 9h di dati calcolati con il riavvio forzato o attendere una quantità di tempo sconosciuta per questa cosa da completare (se non è bloccata da qualche parte). Inoltre, "ogni mezz'ora" non lo farebbe - dovresti sempre farlo prima di entrare in un metodo che potrebbe (o lo farà) bloccare su "disco" IO "per un periodo di tempo prolungato – thejh