我的Makefile看起来像这样:
setsid ./CppServer>daemon.log 2>&1 &
echo $!>daemon.pid
我期望它做的是将my_awesome_script的PID存储在相应的文件中。然而,那里什么都没有。那问题出在哪里?
答案 0 :(得分:4)
如果你的makefile看起来真的像这样你会得到一个错误,因为我没有看到任何实际的make语法,只是shell语法。然而,我的水晶球告诉我,这两行可能是规则的一部分。如果是,你应该意识到如何制作食谱;对于每一行,创建一个单独的子shell,其中该行的命令是独立执行的:您的两个命令对彼此的环境一无所知。如果要在同一子shell中执行两个命令,则应将它们作为一行发出(必要时使用行继续符),或使用make的ONESHELL指令。
答案 1 :(得分:0)
您尝试使用的变量打印后台运行的最后一个程序的pid。它被正确写成echo $! > filename.extension。但是既然你在foregorund中运行它,你有两个选择。通过添加&运行它在后台运行它。到./script_to_run&行的末尾,或者您可以使用echo $$>打印脚本本身来提交当前正在运行的进程的pid。 filename.extension(在脚本中)。这是一个可能对您有帮助的链接http://tldp.org/LDP/abs/html/internalvariables.html