您如何停止两个并发过程



在我的网络开发工作流中,我有两个进程:

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

我希望能够运行它们,然后稍后同时停止它们。我已经看到每个人都建议使用&and and oterator:

process_1 & process_2

但是按Ctrl + C仅停止第二个。我必须手动进行kill。我在这种方法中缺少什么?

您可以将前景脚本明确杀死子过程,以响应Sigint:

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

在此示例中有一个种族条件:如果您在分配pid1之前将SIGINT发送给父,kill将发出警告消息,并且不会终止任何孩子。如果在分配pid2之前发送SIGINT,则仅将运行cmd1的进程发送信号。无论哪种情况,父母都将继续运行,并且可以发送第二个SIGINTkill的某些版本可让您通过使用kill -$$向进程组发送信号来避免这种情况,但并非所有版本的kill支持该使用情况。(请注意,如果任何一个子进程均未响应信号终止,则父母不会退出,而是继续等待。)

如何编写两个脚本,一个包含

./process_1 &
./process_2 &

和第二个包含

killall process_1
killall process_2

通过运行第一个脚本开始两个prcesses,并通过运行第二个脚本结束它们。

相关内容

  • 没有找到相关文章

最新更新