Если нет, то как мы можем запустить фоновый процесс в C?
Можем ли мы запустить фоновый процесс, используя exec() в качестве аргумента?
Ответы (3)
В Unix exec() — это только часть истории.
exec() используется для запуска нового двоичного файла в текущем процессе. Это означает, что двоичный файл, который в данный момент выполняется в текущем процессе, больше не будет выполняться.
Итак, прежде чем вызывать exec(), вы хотите вызвать fork(), чтобы создать новый процесс, чтобы ваш текущий двоичный файл мог продолжать работать.
Обычно, чтобы текущий двоичный файл ожидал завершения нового процесса, вы вызываете одну из функций семейства wait*(). Эта функция переводит текущий процесс в спящий режим до тех пор, пока процесс, который вы ожидаете, не завершится.
Таким образом, чтобы создать «фоновый» процесс, ваш текущий процесс должен просто пропустить вызов ожидания.
Используйте вызов fork()
для создания нового процесса, затем exec() для загрузки программы в этот процесс. См. справочные страницы (man 2 fork
, man 2 exec
) для получения дополнительной информации.
Fork возвращает PID дочернего элемента, поэтому общая идиома:
if(fork() == 0)
// I'm the child
exec(...)