2014-04-29 21 views
8

Tôi hiện có một quy tắc Makefile như sau:tiết kiệm PID của quá trình sinh ra trong một Makefile

start: 
    ./start.sh 

mà bắt đầu một máy chủ rất đơn giản cần thiết như là một phần của quá trình xây dựng. Tôi có một quy tắc cho dừng máy chủ:

stop: 
    kill `cat bin/server.PID` 

đây là kịch bản start.sh:

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

NB server.py phải được chạy từ bên trong thư mục bin

Tôi muốn muốn thực hiện chức năng của start.sh trong nguyên tắc bắt đầu, tôi đã thử nhiều thứ nhưng dường như không thể lấy được PID.

Trả lời

19

Tôi không hiểu bạn đang gặp khó khăn ở đâu. Có gì sai với

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

?

Bạn cũng có thể làm cho pidfile một mục tiêu và sự phụ thuộc: "Tôi không hiểu nơi bạn đang bị mắc kẹt"

start: server.PID 

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

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

.PHONY: start stop 
+0

- $$! dường như không trả lại gì cho tôi, tôi sẽ nhìn lại! –

+0

điển hình hoạt động ngay bây giờ! Tôi không thể nhìn thấy cuộc sống của tôi những gì tôi đã làm sai trước đây! - Cảm ơn! –

+2

Có thể bắt được rằng '$!' Là một biến hệ vỏ, không phải là biến biến (chẳng hạn như '$ @' hoặc '$ <'), và do đó bạn phải nhân đôi '$'. – reinierpost

Các vấn đề liên quan