Захват PID фонового процесса, запущенного Makefile - PullRequest
7 голосов
/ 06 февраля 2012

У меня есть Makefile, который запускает веб-сервер Django. Я хотел бы, чтобы сервер запускался в фоновом режиме, а PID сохранялся в файл.

Мой рецепт выглядит так:

run: venv
    @"${PYTHON}" "${APP}/manage.py" runserver 80

Интуитивно, чтобы создать фоновый процесс и захватить PID, мне нужно сделать что-то вроде этого:

run: venv
    @"${PYTHON}" "${APP}/manage.py" runserver 80 & ; echo "$$!" > "${LOGDIR}/django.pid"

Это не работает, хотя. Под-оболочка, которую использует make (в моем случае / bin / sh), работает, когда вы используете:

<command> &

... для фонового процесса и работает при использовании:

<command> ; <command>

(или <command> && <command> и т. Д.) Для объединения команд. Однако, когда я пытаюсь создать фоновый процесс для первого процесса и связать второй, я получаю следующую ошибку:

/bin/sh: -c: line 0: syntax error near unexpected token `;'

Каков наилучший способ создать фоновый процесс и записать PID в Makefile?

Спасибо
- B

Ответы [ 2 ]

20 голосов
/ 06 февраля 2012

Просто оставьте один амперсанд без точки с запятой после него:

run: venv
    @"${PYTHON}" "${APP}/manage.py" runserver 80 & echo "$$!" > "${LOGDIR}/django.pid"

Амперсанд действует как разделитель команд так же, как точка с запятой:

<command> & <command>
0 голосов
/ 06 февраля 2012

Если Make доставляет вам слишком много хлопот, вы всегда можете заставить цель запустить скрипт sh;в этом сценарии запустите процесс, фон, а затем выведите pid в файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...