在Makefile中获取最后一个进程'PID

Ale*_*lex 5 pid makefile

我的Makefile看起来像这样:

setsid ./CppServer>daemon.log 2>&1 &
echo $!>daemon.pid
Run Code Online (Sandbox Code Playgroud)

我期望它做的是将my_awesome_script的PID存储在相应的文件中.然而,那里什么都没有.那么问题出在哪里?

eri*_*ous 4

如果你的 makefile 确实像这样,你会得到一个错误,因为我没有看到任何实际的 make 语法,只有 shell 语法。然而,我的水晶球告诉我,这两行可能是规则配方的一部分。如果是的话,您应该了解 make 如何执行配方;对于每一行,都会创建一个单独的子 shell,其中该行的命令是独立执行的:您的两个命令不了解彼此的环境。如果您希望在同一个子 shell 中执行两个命令,则应将它们作为一行发出(如有必要,使用行继续字符),或使用 make 的 ONESHELL 指令。

  • 那没有帮助。告诉我:为什么是$!在 Makefile 中询问时为空? (2认同)
  • @nalply:它是空的,因为 make 没有定义具有该名称的变量。如果你想在 shell 中使用它,你必须转义美元符号:`$$!`,但是你必须注意我关于在一行上发出命令的评论,例如用分号分隔。 (2认同)