Следующий код должен работать для вас (с использованием timeout
):
test: all clean
timeout 25 valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --log-file=$VALGRINDFILE ./supermercato
Несколько проблем в исходном коде:
- Makefile запускает каждую строку цели в отдельной оболочке. Поэтому вы должны присоединиться к ним, используя backsla sh '
\
'. - Вы должны экранировать
$
в коде оболочки следующим образом: $$PROCESS_TO_KILL
, $$!
. 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