2012-01-24 46 views
0

对于我正在开发的webapp,我有一个bash脚本来监视源代码中的更改并更新运行环境。从bash脚本运行和查杀服务器和观察者

function app-serve { 
    python runserver.py 
} 

function compile-coffee { 
    inotifywait -e modity scripts | while read change; do 
     coffee -o js scripts 
    done 
} 

现在,我需要这两种功能同时运行,

app-serve & 
compile-coffee & 

等待,太

wait 

的问题是,当我想停止这些进程,一个简单的Ctrl-C没有这样做。当我执行Ctrl-C时,我得到命令提示符,但在函数中运行的进程仍然存在。

有没有办法让bash等到我点击Ctrl-C,然后杀掉所有的子进程?

编辑:澄清一点,我看到了python过程中,我在app-serve功能打死开始。只有inotifywait和几个bash进程悬而未决。

回答

1

你可以在你的bash脚本中捕获ctrl-c信号并让它执行一个函数来查找进程并杀死它们。

http://hacktux.com/bash/control/c

大概就像killall应用服务器和killall编译咖啡。

不要忘记通过退出调用退出bash脚本。

+0

不错。感谢关于陷印的信息。但是,我想找到pid并杀死它们,而不是'killall'。另外,当我将函数名称设为'killall'时,它会显示'app-server:no process found'。 –

+0

此外,请参阅我对编码问题的编辑。 –