0

在我的 Web 开发工作流程中,我有两个流程:

  1. 监视我的文件夹以进行更改
  2. 在浏览器中预览我的网站

我希望能够运行它们,然后同时停止它们。我见过每个人都建议使用 & 运算符:

process_1 & process_2

但按下Ctrl + C只会停止第二个。我必须kill手动完成第一个。我在这种方法中缺少什么?

4

2 回答 2

2

写两个脚本怎么样,一个包含

./process_1 &
./process_2 &

和第二个包含

killall process_1
killall process_2

通过运行第一个脚本启动两个进程,并通过运行第二个脚本结束它们。

于 2012-10-30T01:05:35.123 回答
2

您可以让前台脚本显式终止子进程以响应 SIGINT:

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

此示例中有一个竞争条件:如果您在分配SIGINT之前发送给父级,则会发出警告消息并且两个子级都不会被终止。如果指定了 send before ,则只会向正在运行的进程发送信号。在任何一种情况下,父级都将继续运行,并且可以发送第二个。某些版本允许您通过使用 向进程组发送信号来避免这种竞争条件,但并非所有版本都支持这种用法。(请注意,如果任一子进程没有响应该信号而终止,则父进程不会退出而是继续等待。)pid1killSIGINTpid2cmd1SIGINTkillkill -$$kill

于 2012-10-30T03:40:56.297 回答