Можем ли мы запустить фоновый процесс, используя exec (), давая & в качестве аргумента? - PullRequest
5 голосов
/ 02 октября 2009

Если нет, как мы можем запустить фоновый процесс в C?

Ответы [ 3 ]

9 голосов
/ 03 октября 2009

В Unix exec () - только часть истории.

exec () используется для запуска нового двоичного файла в текущем процессе. Это означает, что двоичный файл, который в данный момент выполняется в текущем процессе, больше не будет работать.

Итак, перед тем как вызывать exec (), вы хотите вызвать fork (), чтобы создать новый процесс, чтобы ваш текущий двоичный файл мог продолжить работу.

Обычно, чтобы текущий двоичный файл ожидал завершения нового процесса, вы вызываете одно из семейства wait * (). Эта функция переведет текущий процесс в спящий режим до тех пор, пока не будет завершен ожидаемый вами процесс.

Таким образом, чтобы создать «фоновый» процесс, ваш текущий процесс должен просто пропустить вызов и ждать.

4 голосов
/ 02 октября 2009

Используйте вызов <a href="http://www.manpagez.com/man/2/fork/" rel="nofollow noreferrer">fork()</a> для создания нового процесса, затем exec () для загрузки программы в этот процесс. См. Справочные страницы (man 2 fork, man 2 exec) для получения дополнительной информации.

3 голосов
/ 03 октября 2009

Fork возвращает PID ребенка, поэтому общая идиома:

if(fork() == 0)
    // I'm the child
    exec(...)
...