2013-05-10 48 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的东西。