【问题标题】:running 2 sh files at the same time同时运行 2 个 sh 文件
【发布时间】:2014-04-08 01:34:44
【问题描述】:

我想同时运行 2 个 sh 文件。大佬能告诉我怎么弄吗?

示例:我有a.sh 文件和b.sh 文件,我想用线程同时运行这些文件。

【问题讨论】:

  • 也许这对你来说很明显,但我想知道你所说的 with thread 是什么意思...据我所知,每个脚本都会得到它自己的 thread 在操作系统级别,即它自己的 进程 id 和东西。
  • 使用 GNU parallelxargs -P

标签: shell unix sh


【解决方案1】:

至少在后台运行其中一个。那是一个单独的进程,不是一个单独的线程;但无论如何你不能真正在同一个进程中运行不同的程序。

./a.sh &
./b.sh
wait

这将在后台启动a.sh,并在前台运行b.sh。如果先完成,我们还会wait 让后台进程完成。

输出缓冲等存在各种问题,这通常会使新手感到困惑。在提出更多问题之前,您可能应该找到有关后台作业的教程或常见问题解答。以下是一些谷歌点击:

【讨论】:

    【解决方案2】:

    嗯,如果您希望它们在完全相同的确切时间运行,那可能没那么简单……我什至不确定是否可能。我能想到的最好的是:

    ./a.sh ; ./b.sh
    

    它们将一个接一个地执行,取决于a.sh 需要多长时间才能完成它可能需要一段时间。另一种选择是使用调度程序,例如cronat - 在操作系统级别可能有一些magic 允许两个脚本在以这种方式调度的情况下同时运行。


    编辑

    从 cmets 中,我已经更正了由 & ; 引起的语法错误。感谢您指出了这一点。

    关于其他 cmets,我认为命令是按顺序运行的,如 bash 自述文件中所述:

    用 ; 分隔的命令依次执行;外壳等待 每个命令依次终止。返回状态为 最后执行的命令的退出状态。

    因此./a.sh ; ./b.sh会先执行a.sh,等到它完成,再运行b.sh

    【讨论】:

    • 去掉分号;它是一个命令终止符,就像 & 是一个命令终止符,你不能单独使用分号(语法错误)。
    • > They will be executed one after the other - (假设您修复了@JonathanLeffler 指出的语法错误)不,它们都将被发送到它们“同时运行”的后台,松散地说。跨度>
    • 感谢您的 cmets。我已经编辑了我的答案:)
    猜你喜欢
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 2016-08-08
    • 2019-12-11
    • 1970-01-01
    • 2010-10-20
    相关资源
    最近更新 更多