2012-10-30 41 views
0

在我的Web开发工作流程,我有两个过程:如何停止两个并发进程?

  1. 看我的文件夹更改
  2. 预览我的网站在浏览器中

我希望能够运行它们再后来同时停止它们。我见过使用&运算符大家提示:

process_1 & process_2 

但按Ctrl + C仅停止第二个。我必须手动输入kill。我在这种方法中错过了什么?

回答

2

你可以有前景脚本明确地杀子过程响应SIGINT:

#!/bin/sh 
trap 'kill $pid1 $pid2' 2 
cmd1 & 
pid1=$! 
cmd2 & 
pid2=$! 
wait 

有一个在这个例子中的竞争条件:如果你pid1之前发送SIGINT父分配,kill会发出一条警告信息,两个孩子都不会被终止。如果在分配pid2之前发送SIGINT,则只会发送运行cmd1的进程信号。无论哪种情况,父母都会继续跑步,并可以发送第二个SIGINTkill的某些版本允许您通过使用kill -$$向进程组发送信号来避免这种竞争条件,但并非所有版本的kill都支持该用法。 (请注意,如果任一子进程没有响应该信号而终止,父进程将不会退出,但会继续等待。)

+0

工作原理!谢谢 :) – silvenon

2

如何写两个剧本,含

./process_1 & 
./process_2 & 

和第二含

killall process_1 
killall process_2 

同时启动prcesses通过运行一个脚本,并通过运行第二个脚本结束这些之一。