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

推荐答案

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

java myprog &
java myprog &
java myprog &

除此之外,您还可以研究Python或Ruby,它们有线程管理实用程序,您可以等待每个实用程序完成并收集输出/退出状态,等等.

Edit:borrow @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

Linux相关问答推荐

一个bash脚本,用于基于2列映射文件替换多个文件名中的模式

如何在 gcc 搜索路径上防止多个版本的 Boost?

有没有办法确定什么代码使 linux 共享对象inflating ?

删除一行和它之前的一行

`std::cout` 是如何实现的?

如何在ubuntu中通过.sh文件启动多个服务

如何判断 Ubuntu 12.04 LTS 上是否安装了多个版本的 PHP?

应用程序如何在运行时解析为不同版本的共享库?

为什么在 Linux 中使用 select

在 Python 上模拟鼠标点击

如何在 shell 脚本中动态生成新的变量名?

何时判断 EINTR 并重复函数调用?

通过 VM 的 Centos - 镜像列表中没有 URL

使用 ssh 判断远程主机上是否存在文件

根据日期范围过滤日志(log)文件条目

CLOCK_MONOTONIC 和 CLOCK_MONOTONIC_RAW 有什么区别?

将所有文件扩展名转换为小写

Linux 守护进程

如何在 UNIX 中将字符串转换为整数

计算每个进程打开的文件