在Makefile中保存生成进程的PID

Chr*_*cho 10 pid makefile

我目前有一个Makefile规则:

start:
    ./start.sh
Run Code Online (Sandbox Code Playgroud)

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

stop:
    kill `cat bin/server.PID`
Run Code Online (Sandbox Code Playgroud)

这是start.sh脚本:

#!/bin/bash
cd bin
python server.py &
echo $! > server.PID
Run Code Online (Sandbox Code Playgroud)

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

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

rei*_*ost 25

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

start:
    cd bin && { python server.py & echo $$! > server.PID; }
Run Code Online (Sandbox Code Playgroud)

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

start: server.PID

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

stop: server.PID
    kill `cat $<` && rm $<

.PHONY: start stop
Run Code Online (Sandbox Code Playgroud)

  • 也许问题是`$!`是一个shell变量,而不是make变量(例如`$ @`或`$ <`),因此你必须加倍`$`. (2认同)