【问题标题】:Parallel processes in bashbash 中的并行进程
【发布时间】:2021-07-26 04:58:10
【问题描述】:

我有两个 bash 脚本:p1p2。第一个 p1 持续 40 秒,当它结束时我想运行 p2

然后,我想每隔 2 秒平行地重复这个模式。这是一个图表,可以更好地说明我想要什么:

我怎样才能做到这一点?最好在 bash 中,但如果不可能,我可以使用 python 并使用子进程运行我的 bash 脚本。

感谢您的帮助

【问题讨论】:

    标签: python bash multithreading algorithm scheduled-tasks


    【解决方案1】:

    while true; do; ( p1; p2 ) &; sleep 2; done

    为避免烦人的“完成”打印输出: while true; do; ( ( p1; p2 ) & ); sleep 2; done

    显然,您可以根据需要修改为使用&&|

    如果您不介意在第一次运行前等待 2 秒,您可以将 while true 替换为 while sleep 2,这样看起来会更好,但在开始时会浪费时间。

    【讨论】:

    • 谢谢!它完全符合我的要求!
    【解决方案2】:

    每隔两秒,在后台启动 p1,然后是 p2:

    while sleep 2
    do
      p1 && p2 &
    done
    

    【讨论】:

    • 据我所知p1 && p2应该放在括号内,以达到并行运行的要求。
    • @MariosMitalidis 我认为这是正确的。 p1 && p2 &{ p1 && p2; } & 相同。你可以试试{ sleep 1; echo a; } && { sleep 1; echo b; } &
    • 谢谢!它完全符合我的要求!
    • 嗨@Socowi,我可以看到这个答案是如何运行p1,然后是p2,但是,它应该并行启动成对的进程。例如:bash while sleep 2 ; do { sleep 5; echo -n "p1: "; date } && { sleep 5; echo -n "p2: "; date } & ;done p1: Sat 8 May 2021 20:19:26 BST p2: Sat 8 May 2021 20:19:31 BST p1: Sat 8 May 2021 20:19:33 BST p2: Sat 8 May 2021 20:19:38 BST
    • @Socowi 你是对的,谢谢你的回复。我在 zsh 中对此进行了测试,它与 bash 有不同的行为。那是我这边的一个错误。这个问题是相关的:unix.stackexchange.com/questions/162286/…
    猜你喜欢
    • 1970-01-01
    • 2017-04-12
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 2011-09-29
    • 2021-05-09
    • 1970-01-01
    相关资源
    最近更新 更多