Я пытаюсь запустить новую программу (процесс) из текущей текущей программы c. Вместо использования функций fork() и exec() я хотел использовать функции ядра Linux, такие как switch_mm()/activate_mm() или copy_mm() и т. Д.Как запустить новый процесс с помощью коммутатора адресного пространства linux?
Что я имею в виду, это сначала создать новый адрес пространство в памяти и загрузить новый исполняемый файл (ELF) в память. Затем переместите адресное пространство из текущего адресного пространства в новое адресное пространство, используя команду, например switch_mm() или activate_mm(), и пусть новая программа начнет выполнение. Я не уверен, что это правильный правильный подход. Но, я думаю, есть функции ядра Linux, которые можно использовать для выполнения этих задач. Я не уверен, как создать новое адресное пространство в текущем процессе и загрузить ELF. Я также не уверен, можно ли выполнить эту задачу с помощью одного процесса (не создавая новый процесс для новой программы). Любая помощь будет оценена по достоинству.
'switch_mm()' и т. Д. Являются функциями ядра. Пользовательское пространство не может использовать их напрямую. 'fork()' и т. д. вызывают их для вас. –