You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在同一脚本中为多进程配置独立sleep命令并同时运行?

在单个脚本中并行运行带独立sleep的进程

我懂你想要的效果——在同一个脚本里让多个进程各自按自己的时间间隔输出内容,之前拆分到子脚本调用没搞定,现在想用while循环来实现对吧?其实核心是要让这些进程并行后台运行,而不是串行执行,我给你一个实用的示例脚本,再拆解下关键要点:

示例脚本

#!/bin/bash

# 定义进程A的逻辑:每X秒输出一次
run_process_a() {
    local interval=5  # 这里替换成你需要的X秒
    while true; do
        # 输出内容可以自定义,这里加上时间方便看效果
        echo "$(date '+%Y-%m-%d %H:%M:%S'): 这是进程A的输出内容"
        sleep $interval
    done
}

# 定义进程B的逻辑:每Y秒输出一次
run_process_b() {
    local interval=10  # 这里替换成你需要的Y秒
    while true; do
        echo "$(date '+%Y-%m-%d %H:%M:%S'): 这是进程B的输出内容"
        sleep $interval
    done
}

# 关键:把两个进程放到后台并行运行
run_process_a &
run_process_b &

# 让主脚本等待所有后台进程结束(不加的话主脚本会直接退出,后台进程仍会继续运行)
wait

关键说明

  1. 后台运行的核心:&符号
    之前用子脚本调用没达到预期,大概率是因为你没加&——如果直接调用子脚本,主脚本会等第一个子脚本执行完(包括它的sleep)才会启动第二个,变成了串行执行。而加&后,进程会被放到后台运行,主脚本会立刻继续执行下一行,这样两个进程就能同时跑起来,各自的sleep互不影响。

  2. 用函数封装逻辑更清晰
    把每个进程的循环和sleep逻辑封装成函数,比写一堆零散的代码更易读、易维护,你还可以轻松扩展出进程C、D之类的。

  3. 可选的wait命令
    最后加wait是让主脚本一直挂着,直到所有后台进程结束(比如你手动终止脚本)。如果不需要主脚本保持运行,也可以去掉wait——这时候主脚本执行完就退出,但后台的两个进程会继续在系统里运行,直到你手动杀掉它们。

额外小技巧

  • 如果不想两个进程的输出混在一起,可以把输出重定向到不同的日志文件:
    run_process_a > process_a.log 2>&1 &
    run_process_b > process_b.log 2>&1 &
    
  • 要停止这些进程的话,可以用pkill -f 你的脚本文件名,或者在启动脚本时记下后台进程的PID(比如run_process_a & echo $! > pid_a.txt),之后用kill $(cat pid_a.txt)来单独终止某个进程。

内容的提问来源于stack exchange,提问作者TDias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:38:35