我要轉儲正在運行的進程是核心,根據/proc/<pid>/status
,目前阻塞磁盤活動。實際上,它忙於在GPU上工作(應該是4小時的工作,但現在已經花費了很長時間)。我想知道該流程的工作已經完成了多少,所以能夠轉儲流程的內存會很好。然而,據我所知,「阻止磁盤活動」意味着不可能以任何方式中斷過程,使用gdb需要中斷並暫時停止進程以便通過ptrace連接,對吧?我能否在磁盤活動上阻塞進程(最好不要殺死它)?
我知道我可以以root身份讀取/proc/<pid>/{maps,mem}
以獲得(可能不一致的)內存狀態,但我不知道任何方法來獲取進程的用戶空間CPU寄存器值......它們保持不變該進程在內核中,對嗎?
你可以在源代碼中添加每半小時寄存器的打印.... – 0x90 2013-03-22 10:04:30
當然,我會更高興比大約爲推出自己的核心轉儲製造商一個現成的解決方案。 :( – thejh 2013-03-22 10:11:38
@ 0x90的權利,但我希望能夠這樣做到一個已經運行的程序,因爲我不想通過強制重啓失去約9h的計算數據或等待未知的時間這個東西要完成(如果它沒有卡在某個地方),而且「每半小時」都不會這樣做 - 在輸入一個可能(或將要)阻止「磁盤」的方法之前,你必須一直這麼做IO」的時間 – thejh 2013-03-22 10:15:38