为什么这个Makefile会无限次地执行程序?

问题描述 投票:0回答:1

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)

全部: 用于编译。

c linux makefile language
1个回答
1
投票

下面的代码应该对你有用(使用 timeout):

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

你的原始代码中存在一些问题

  1. Makefile在一个单独的shell中运行目标的每一行。因此,你必须使用反斜杠''来连接它们。\'.
  2. 你应该逃跑 $ 在shell代码中,像这样。$$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
© www.soinside.com 2019 - 2024. All rights reserved.