【发布时间】:2011-04-24 01:17:50
【问题描述】:
我的 Makefile 看起来像这样:
setsid ./CppServer>daemon.log 2>&1 &
echo $!>daemon.pid
我期望它做的是将 my_awesome_script 的 PID 存储在相应的文件中。然而那里什么都没有。那么问题出在哪里?
【问题讨论】:
我的 Makefile 看起来像这样:
setsid ./CppServer>daemon.log 2>&1 &
echo $!>daemon.pid
我期望它做的是将 my_awesome_script 的 PID 存储在相应的文件中。然而那里什么都没有。那么问题出在哪里?
【问题讨论】:
如果你的 makefile 真的像这样你会得到一个错误,因为我没有看到任何实际的 make 语法,只是 shell 语法。然而,我的水晶球告诉我,这两行可能是规则的一部分。如果是,您应该了解 make 如何执行配方;为每一行创建一个单独的子shell,其中该行的命令独立执行:您的两个命令对彼此的环境一无所知。如果你想在同一个子shell中执行两个命令,你应该将它们作为一行发出(必要时使用行继续符),或者使用make的ONESHELL指令。
【讨论】:
$$!,但你必须注意我关于在一行上发出命令的评论,用例如分隔。分号。
您尝试使用的变量会打印在后台运行的最后一个程序的 pid。它正确地写为 echo $! > 文件名.扩展名。但是由于您在前台运行它,因此您有两个选择。通过在 ./script_to_run & 行的末尾附加一个 & 来在后台运行它,或者您可以使用 echo $$ > filename.extension 让脚本本身打印以归档当前正在运行的进程的 pid(在脚本内)。这是一个可能对您有帮助的链接http://tldp.org/LDP/abs/html/internalvariables.html
【讨论】: