【问题标题】:saving PID of spawned process within a Makefile在 Makefile 中保存生成进程的 PID
【发布时间】:2014-04-29 13:29:50
【问题描述】:

我目前有一个 Makefile 规则:

start:
    ./start.sh

它启动了一个非常简单的服务器,作为构建过程的一部分。我有另一个停止服务器的规则:

stop:
    kill `cat bin/server.PID`

这里是 start.sh 脚本:

#!/bin/bash
cd bin
python server.py &
echo $! > server.PID

NB server.py 必须在 bin 目录中运行

我想在启动规则中实现 start.sh 的功能,我尝试了很多方法,但似乎无法获得 PID。

【问题讨论】:

    标签: makefile pid


    【解决方案1】:

    我不明白你在哪里卡住了。 怎么了

    start:
        cd bin && { python server.py & echo $$! > server.PID; }
    

    ?

    您还可以将 pidfile 设为目标和依赖项:

    start: server.PID
    
    server.PID:
        cd bin && { python server.py & echo $$! > $@; }
    
    stop: server.PID
        kill `cat $<` && rm $<
    
    .PHONY: start stop
    

    【讨论】:

    • “我不明白你在哪里卡住了。” - 美元!似乎什么都没给我回来,我再看看!
    • 典型的它现在工作!我一辈子都看不到我以前做错了什么! - 谢谢!
    • 可能问题在于$! 是一个shell 变量,而不是一个make 变量(例如$@$&lt;),因此您必须将$ 加倍。跨度>
    • 不,我得到了双 $ - 我想我已经将命令分开而不是在花括号中的一个连接命令中全部...
    • @baruch:这是sh(因此是bash)的事情。他们创建代码块。在这种情况下,它们是必需的,因为 &amp;&amp; 的绑定比 &amp; 更强。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 2014-04-24
    • 2015-02-09
    • 2017-04-10
    • 1970-01-01
    相关资源
    最近更新 更多