bash中的主题?

auw*_*all 31 linux bash terminal

是否可以在bash脚本中使用线程.我在java中有一个驱动程序类,我试图同时运行多个实例.我知道这样做的唯一方法是在bash中使用线程,但我不确定这是否可能.任何帮助,将不胜感激

Ste*_*let 35

Bash本身不支持线程,但您可以在后台启动多个java进程,如:

java myprog &
java myprog &
java myprog &
Run Code Online (Sandbox Code Playgroud)

除了您可能会查看具有线程管理实用程序的Python或Ruby之外的任何内容,您可以等待每个完成并收集输出/退出状态等.

编辑:借用@CédricJulien的建议来使用wait,这是一个更全面的例子.鉴于此MyProg.java计划:

public class MyProg {
    public static void main(String[] args) {
        System.exit(Integer.parseInt(args[0]));
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以编写以下bash-threads.sh脚本来并行启动它的多个实例:

#!/bin/bash
set -o errexit

java MyProg 1 &
pid1=$!
java MyProg 0 &
pid2=$!
java MyProg 2 &
pid3=$!

wait $pid1 && echo "pid1 exited normally" || echo "pid1 exited abnormally with status $?"
wait $pid2 && echo "pid2 exited normally" || echo "pid2 exited abnormally with status $?"
wait $pid3 && echo "pid3 exited normally" || echo "pid3 exited abnormally with status $?"
Run Code Online (Sandbox Code Playgroud)

它的输出是:

pid1 exited abnormally with status 1
pid2 exited normally
pid3 exited abnormally with status 2
Run Code Online (Sandbox Code Playgroud)


Céd*_*ien 32

你将无法启动一些"bash线程",但你可以在bash中启动子&进程,只需使用命令之后,它将在后台进程中启动它.

wait启动流程后调用a 等待它们完成.

试试这个

first_command &
second_command &

wait
Run Code Online (Sandbox Code Playgroud)

  • 如果我可以检查他们两个我会。两个答案都是完美的,但他的只是之前。 (2认同)