如何使用linux地址空间交换机运行新进程?

时间:2015-11-16 20:00:11

标签: c linux process linux-kernel

我正在尝试从当前运行的c程序启动一个新程序(进程)。我没有使用fork()和exec()函数,而是想使用linux内核函数,如switch_mm()/ activate_mm()或copy_mm()等。

我想到的是首先在内存中创建一个新的地址空间并将新的可执行文件(ELF)加载到内存中。然后使用switch_mm()或activate_mm()等命令从当前地址空间切换到新的地址空间,让新程序开始执行。我不确定这是否是正确的方法。但是,我认为有Linux内核函数可用于执行这些任务。我不知道如何在当前进程中创建新的地址空间并加载ELF。我也不确定是否可以使用单个流程完成此任务(不为新程序创建新流程)。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

你不能。您引用的函数(binswitch_mm()activate_mm())都是内部内核函数,不可供用户空间使用。

如果您真的有冒险精神,那么可能能够使用clone()系统调用来模拟copy_mm() / fork()的效果创建一个新进程,然后停止子进程,使用ptrace()修改其状态,然后允许它继续。不过,这将是一项相当复杂的任务。