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)
全部: 用于编译。
下面的代码应该对你有用(使用 timeout
):
test: all clean
timeout 25 valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --log-file=$VALGRINDFILE ./supermercato
你的原始代码中存在一些问题
\
'.$
在shell代码中,像这样。$$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