如何在shell脚本中取消已发起的curl请求
实现方案
核心逻辑是利用shell内置变量$!获取最近一次后台运行进程的PID,启动curl后直接杀掉对应PID即可取消请求。
修改后可用的完整脚本
for i in {1..50} do # 后台发起curl请求 curl --location --request GET 'localhost/endpoint' --header 'Content-Type: application/json' & # 记录刚启动的curl进程PID curl_pid=$! # 终止进程取消请求 kill $curl_pid done
补充优化说明
- 原脚本中的
$(eval echo {1..50})写法冗余,Bash原生支持{1..50}范围遍历,无需额外调用eval、echo命令。 - 如果需要保证请求已经发送到服务端再取消,可以在kill前加短延时,同时屏蔽kill的报错信息:
for i in {1..50} do curl --location --request GET 'localhost/endpoint' --header 'Content-Type: application/json' & curl_pid=$! # 延时100毫秒,确保请求已经发出 sleep 0.1 # 终止进程,屏蔽找不到进程的报错 kill $curl_pid 2>/dev/null # 可选:回收进程状态避免产生僵尸进程 wait $curl_pid 2>/dev/null done
内容的提问来源于stack exchange,提问作者Pbb
相关产品推荐
相关产品推荐

