在Makefile中保存生成的进程的PID

问题描述 投票:10回答:2

我目前有一个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
2个回答
26
投票

我不明白你在哪里被困。怎么了

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

0
投票

@ reinierpost的答案对我来说很棒,但是当我尝试(在osx和make上)时,它返回“语法错误,出现在意外标记'&&'附近”。将启动命令放在shell脚本中可以达到目的,并且易于阅读/理解/维护:

Makefile:

start: server.PID

server.PID:
        ./start_server.sh

stop: server.PID
        kill `cat server.PID`
        rm server.PID

start_server.sh:

cd /path/to/test
./run_my_test &
PID=$!
echo $PID > server.PID
© www.soinside.com 2019 - 2024. All rights reserved.