2014-04-29 10 views
8

Al momento ho una regola Makefile così:risparmio PID del processo generato all'interno di un Makefile

start: 
    ./start.sh 

che inizia un semplice server necessari come parte del processo di generazione. Ho un'altra regola per l'arresto del server:

stop: 
    kill `cat bin/server.PID` 

Ecco lo script start.sh:

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

NB server.py deve essere eseguito all'interno della directory bin

mi piacerebbe come implementare la funzionalità di start.sh all'interno della regola di avvio, ho provato numerose cose ma non riesco a ottenere il PID.

risposta

19

Non capisco dove sei bloccato. Cosa c'è di sbagliato con

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

?

È inoltre possibile effettuare il pidfile un obiettivo e dipendenza: "Non capisco dove stai rimanere bloccati"

start: server.PID 

server.PID: 
    cd bin && { python server.py & echo $$! > [email protected]; } 

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

.PHONY: start stop 
+0

- $$! sembra che non restituisca nulla per me, guarderò di nuovo! –

+0

tipico ora funziona! Non riesco a vedere per la vita di me quello che stavo facendo di sbagliato prima! - Grazie! –

+2

Forse il problema era che '$!' È una variabile di shell, non una variabile make (come '$ @' o '$ <'), e quindi devi raddoppiare il '$'. – reinierpost