是否可以在bash脚本中使用线程。我在java中有一个驱动程序类,我试图同时运行它的多个实例。我知道的唯一方法是在bash中创建线程,但我不确定这是否可能。任何帮助都将不胜感激
发布于 2011-05-27 18:58:45
Bash本身不支持线程,但您可以在后台启动多个java进程,例如:
java myprog &
java myprog &
java myprog &
除此之外,您可以查看Python或Ruby,它们都有线程管理实用程序,您可以等待每个线程完成并收集输出/退出状态,等等。
编辑:借用@CédricJulien的建议来使用wait
,这里有一个更彻底的例子。给定此MyProg.java
程序:
public class MyProg {
public static void main(String[] args) {
System.exit(Integer.parseInt(args[0]));
}
}
您可以编写以下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 $?"
它的输出是:
pid1 exited abnormally with status 1
pid2 exited normally
pid3 exited abnormally with status 2
发布于 2011-05-27 18:59:39
您不能启动某些“bash线程”,但您可以在bash中启动子进程,只需在命令后使用&
,它将在后台进程中启动它。
在启动进程后调用wait
,等待进程完成。
尝尝这个
first_command &
second_command &
wait
发布于 2021-07-16 10:26:01
Bash >= 4.0支持coproc关键字
coproc运行一个后缀为&的命令,但是允许访问它的进程ID以及stdin和stdout。
例如:
coproc MYJOB myprog <args>
myprog的进程id现在是$MYJOB_PID
然后,数组变量$MYJOB包含$MYJOB中作业的标准输出和$MYJOB1中标准输入的文件描述符
https://stackoverflow.com/questions/6156541
复制