在我的 Web 开发工作流程中,我有两个流程:
- 监视我的文件夹以进行更改
- 在浏览器中预览我的网站
我希望能够运行它们,然后同时停止它们。我见过每个人都建议使用 & 运算符:
process_1 & process_2
但按下Ctrl + C
只会停止第二个。我必须kill
手动完成第一个。我在这种方法中缺少什么?
在我的 Web 开发工作流程中,我有两个流程:
我希望能够运行它们,然后同时停止它们。我见过每个人都建议使用 & 运算符:
process_1 & process_2
但按下Ctrl + C
只会停止第二个。我必须kill
手动完成第一个。我在这种方法中缺少什么?
写两个脚本怎么样,一个包含
./process_1 &
./process_2 &
和第二个包含
killall process_1
killall process_2
通过运行第一个脚本启动两个进程,并通过运行第二个脚本结束它们。
您可以让前台脚本显式终止子进程以响应 SIGINT:
#!/bin/sh
trap 'kill $pid1 $pid2' 2
cmd1 &
pid1=$!
cmd2 &
pid2=$!
wait
此示例中有一个竞争条件:如果您在分配SIGINT
之前发送给父级,则会发出警告消息并且两个子级都不会被终止。如果指定了 send before ,则只会向正在运行的进程发送信号。在任何一种情况下,父级都将继续运行,并且可以发送第二个。某些版本允许您通过使用 向进程组发送信号来避免这种竞争条件,但并非所有版本都支持这种用法。(请注意,如果任一子进程没有响应该信号而终止,则父进程不会退出而是继续等待。)pid1
kill
SIGINT
pid2
cmd1
SIGINT
kill
kill -$$
kill