C 如何使用linux地址空间开关运行新进程?

C 如何使用linux地址空间开关运行新进程?,c,linux,process,linux-kernel,C,Linux,Process,Linux Kernel,我正在尝试从当前正在运行的c程序启动一个新程序(进程)。我不想使用fork()和exec()函数,而是想使用诸如switch\u mm()/activate\u mm()或copy\u mm()等linux内核函数 我想到的是首先在内存中创建一个新的地址空间,然后将新的可执行文件(ELF)加载到内存中。然后使用switch_mm()或activate_mm()等命令将地址空间从当前地址空间切换到新地址空间,并让新程序开始执行。我不确定这是否是正确的方法。但是,我认为可以使用linux内核函数来执

我正在尝试从当前正在运行的c程序启动一个新程序(进程)。我不想使用fork()和exec()函数,而是想使用诸如switch\u mm()/activate\u mm()或copy\u mm()等linux内核函数


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

你不能。您所指的函数(
switch_-mm()
activate_-mm()
copy_-mm()
)都是内部内核函数,用户空间无法使用

如果您真的很喜欢冒险,您可以通过使用系统调用创建新进程,然后停止子进程,使用修改其状态,然后允许其继续,来模拟
fork()
/
exec()
的效果。这将是一项相当复杂的任务。

switch_mm()
等都是内核函数。用户空间不能直接使用它们
fork()
等将为您调用它们。