Почему этот Makefile выполняет программу бесконечное количество раз? - PullRequest
0 голосов
/ 27 мая 2020

make-файл должен скомпилировать и выполнить программу c в течение 25 секунд, а затем должен послать программе сигнал SIGHUP, но он будет выполняться бесконечное количество раз. Почему?

Код Makefile:

test: all clean
    valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --log-file=$VALGRINDFILE ./supermercato &
    PROCESS_TO_KILL="$!"
    (sleep 25 && pkill -SIGHUP $PROCESS_TO_KILL)

all: для компиляции.

1 Ответ

1 голос
/ 28 мая 2020

Следующий код должен работать для вас (с использованием timeout):

test: all clean
    timeout 25 valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --log-file=$VALGRINDFILE ./supermercato

Несколько проблем в исходном коде:

  1. Makefile запускает каждую строку цели в отдельной оболочке. Поэтому вы должны присоединиться к ним, используя backsla sh '\'.
  2. Вы должны экранировать $ в коде оболочки следующим образом: $$PROCESS_TO_KILL, $$!.
  3. pkill не убивает по PID, он убивает по шаблону. Необходимо использовать kill.

Ваш фиксированный исходный код:

test: all clean
    valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --log-file=$VALGRINDFILE ./supermercato & \
    PROCESS_TO_KILL="$$!";\
    (sleep 25 && kill -HUP $$PROCESS_TO_KILL);  # You would need to check -SIGHUP or -HUP
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...