首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >捕获由Makefile启动的后台进程的PID

捕获由Makefile启动的后台进程的PID
EN

Stack Overflow用户
提问于 2012-02-06 06:23:59
回答 2查看 5.8K关注 0票数 8

我有一个启动Django web服务器的Makefile。我希望服务器在后台启动,并将PID保存到文件中。

我的食谱是这样的:

代码语言:javascript
复制
run: venv
    @"${PYTHON}" "${APP}/manage.py" runserver 80

直观地说,要对进程进行后台处理并捕获PID,我必须这样做:

代码语言:javascript
复制
run: venv
    @"${PYTHON}" "${APP}/manage.py" runserver 80 & ; echo "$$!" > "${LOGDIR}/django.pid"

不过,这不起作用。'make‘使用的子shell(在我的例子中是/bin/sh)可以在您使用以下命令时工作:

代码语言:javascript
复制
<command> &

...to后台进程,并在使用时工作:

代码语言:javascript
复制
<command> ; <command>

(或<command> && <command>等)若要链接命令,请执行以下操作。但是,当我尝试将第一个进程设为后台并链接第二个进程时,我得到了以下错误:

/bin/sh: -c: line 0: syntax error near unexpected token `;'

为进程设置后台并在Makefile中捕获PID的最佳方法是什么?

谢谢

  • B
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-06 07:09:24

只需留下一个“与”号,后面不带分号:

代码语言:javascript
复制
run: venv
    @"${PYTHON}" "${APP}/manage.py" runserver 80 & echo "$$!" > "${LOGDIR}/django.pid"

与符号充当命令分隔符的方式与分号相同:

代码语言:javascript
复制
<command> & <command>
票数 21
EN

Stack Overflow用户

发布于 2012-02-06 06:54:53

如果Make给您带来了太多麻烦,您总是可以让目标启动一个sh脚本;在该脚本中,启动进程、后台,然后将pid输出到一个文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9153653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档