Получение PID последнего процесса в Makefile - PullRequest
5 голосов
/ 24 апреля 2011

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

setsid ./CppServer>daemon.log 2>&1 &
echo $!>daemon.pid

Что я ожидаю, это сохранить PID my_awesome_script в соответствующем файле.Однако там ничего нет.Так в чем же проблема?

Ответы [ 2 ]

4 голосов
/ 24 апреля 2011

Если ваш make-файл действительно выглядит так, вы получите ошибку, потому что я не вижу никакого реального синтаксиса make, только синтаксис оболочки. Однако мой хрустальный шар говорит мне, что эти две линии могут быть частью рецепта правила. Если это так, вы должны понимать, как make выполняет рецепты; для каждой строки создается отдельная подоболочка, в которой команда этой строки выполняется независимо: ваши две команды ничего не знают о среде друг друга. Если вы хотите, чтобы две команды выполнялись в одном и том же подоболочке, вы должны выполнить их одной строкой (при необходимости используя символы продолжения строки) или использовать директиву ONESHELL make.

0 голосов
/ 24 апреля 2011

Переменная, которую вы пытаетесь использовать, печатает pid последнего запуска программы в фоновом режиме. Это правильно написано как echo $! > filename.extension. Но так как вы запускаете его в foregorund, у вас есть два варианта. Запустите его в фоновом режиме, добавив & в конец строки ./script_to_run &, или вы можете заставить сам скрипт распечатать файл pid текущего запущенного процесса, используя echo $$> filename.extension (внутри скрипта ). Вот ссылка, которая может вам помочь http://tldp.org/LDP/abs/html/internalvariables.html

...