【发布时间】:2020-05-27 19:19:37
【问题描述】:
make 文件必须编译并执行一个 c 程序 25 秒,然后必须向程序发送 SIGHUP 信号,但它会无限次执行。为什么?
生成文件代码:
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? -
...另外,为什么不会它可以多次运行?它不会创建任何
test标记,因此test永远不会比构建输入更新,因此它永远不会“完成”/没有资格再次运行。 -
顺便说一句,使用一行包含三个反引号的行(仅此而已)来开始和结束一个代码段。
-
另一件事是,如果您使用续行来确保所有三个命令都在同一个 shell 实例中运行(或者只是取出换行符,以达到相同的效果,那么这段代码会更加健壮) )。如果
PROCESS_TO_KILL="$!"在与valgrind &不同的shell 中运行,那么$!当然不会在该shell 中填充。而pkill -SIGHUP $PROCESS_TO_KILL也将无法看到该变量。 -
坦率地说,如果你的目标是 GNU 系统,通过
timeout命令运行valgrind会更容易,然后让 that 完成关闭工作下来。