2013-05-10 29 views
-2

根據我對Linux進程系統的理解,您無法真正修改或篡改當前正在運行的進程(至少,沒有內置函數,我知道它可以完成這樣的任務)。但是有沒有解決方法呢?是否可以說,暫停一個進程來定義/修改一個變量,然後讓它再次運行?舉一個簡單的例子,是否可以暫停終端窗口進程,並在再次運行之前更改它的幾何設置?Linux - 篡改現有進程

基本上,我在尋找洞察力是否可能,如果可能我應該嘗試嗎?

編輯--- --- ---

好吧,我會嘗試重組爲更好地說明這個問題:說我有一個幾何80x24運行GNOME終端窗口。是否可以不殺死和/或替換進程以將幾何結構更改爲81x25?正如在暫停狀態下,應用新的更改,然後重新啓動相同的過程?或者是絕對不可能的?

+0

不管誰標榜這件事,至少可以禮貌地解釋你爲什麼這麼做? – 2013-05-10 17:48:12

+1

一種方法是在實時系統上使用崩潰。崩潰/boot/vmlinux-x.x.gz。現在還有一個內核調試器可用。 – 2013-05-10 17:53:19

+0

你想使用'screen' .... – 2013-05-10 18:23:56

回答

2

您有時可能會使用ptrace(2)系統調用(例如,gdb調試器可以附加到進程並更改其數據中的某些內容)。

而且還有/proc/1234/爲PID 1234過程中看到proc(5),你可能不敢寫入/proc/1234/mem - 附相應的文件經偏置小心(也許只有當過程1234停止 - 見lseek(2)read(2)write(2)mmap(2)pwrite(2),kill(2), sigaction(2)等...另請參閱advanced linux programming)。還應考慮/proc/1234/maps

此外,與改變終端的大小:在SIGWINCH(窗口改變信號)與此有關,見​​。我想這友好的應用程序(例如emacsvi)將處理它。 ncurses庫處理它。

您可能感興趣的是application checkpointingBLCR庫,或許還有GNU screen實用工具。

+0

proc內容是否可修改?或者他們只讀? – 2013-05-10 18:12:48

+2

@ S.T.A.L.K.E.R .:'/ proc'中的一些文件是可寫的(至少是所有者)。例如'/ proc//mem'是進程內存的映像 - 如果你寫入它(在請求適當的地址後),你將修改該內存。 – 2013-05-10 18:18:14

+0

@Chris啊,這很有趣。所以有可能在運行中修改進程!真棒。另外,'Iseeking'是什麼? – 2013-05-10 18:22:57

1

如果您只想調整現有窗口的大小,您可以使用類似xdotool的東西。