bash - 如何在 shell 脚本中停止一个进程并转到下一个进程?
问题描述
我有一个脚本可以在它们上线时下载连续的卫星和雷达图像,然后将它们组合成卫星图像动画和雷达图像动画。我创建了两个单独的脚本来从卫星和雷达下载图像。我同时从 shell 脚本运行这些。
python ./rad/rad_retrieval.py; python ./sat/sat_retrieval.py
卫星和雷达图像每 30 分钟在线更新一次,因此这两个 python 脚本将每 30 分钟下载一次图像,直到我们停止该过程。第 2 部分,包含使用 ImageMagick 将每个卫星和雷达图像组合成动画/电影的代码。
# Part 1
echo starting...
python ./rad/rad_retrieval.py; python ./sat/sat_retrieval.py
# Part 2
#combining downloaded satellite images into video
cd /home/Cast/sat_retrieved
echo saving video for satellite images
convert -delay 50 20210516-*.jpg Satellite_retrieved.mp4
echo saving video : Success
#combining downloaded radar images into video
cp Satellite_retrieved.mp4 /home/Cast/
cd /home/Cast/Radar_retrieved/
echo saving video for radar
convert -delay 50 20210516-*.gif Radar_retrieved.mp4
echo saving video : Success
这是我的脚本,我想在用户输入一段时间后停止第 1 部分,并在不停止整个 shell 脚本的情况下转到第 2 部分。怎么做?
解决方案
您可以忽略 SIGTERM 并为 SIGINT 设置一个处理程序以在其到达父 shell 时杀死子进程。这样,用户可以简单地按 Ctrl-C 并跳过第一部分。
# first part
python ./rad/rad_retrieval.py &
python ./sat/sat_retrieval.py &
trap '' term
trap 'kill 0' int
wait
trap - term int
# second part
推荐阅读
- c# - 我可以使用 Id 和 ForeignId 以外的字段从 getstream.io 中删除活动吗?
- css - 有没有办法在饼图中定义单独的 dataLabels 连接器宽度
- groovy - Groovy JsonBuilder 对象
- r - dplyr 中的滚动总和
- mongodb - MongoDB 副本集配置崩溃
- excel - 带有 or 语句的 countifs - excel
- excel - 如何使用AverageIf工作表函数计算平均日期差异(如果填写日期)
- apache-spark - 奇怪的性能问题 Spark LSH MinHash approxSimilarityJoin
- machine-learning - 在 cifar-10 上在 Keras 中实现 AlexNet 的准确性很差
- scala - 如何在 Scala 上导入保存的 ML 模型?