Linux Bash 中的多线程
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/2425870/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Multithreading in Bash
提问by Kiran
I would like to introduce multithreading feature in my shell script.
我想在我的 shell 脚本中引入多线程功能。
I have a script which calls the function read_cfg()
with different arguments.
Each of these function calls are independent.
我有一个脚本,它read_cfg()
使用不同的参数调用函数。这些函数调用中的每一个都是独立的。
Would it be possible to instantiate these function calls (not scripts) parallelly. Please let me how can we achieve that.. ?
是否可以并行实例化这些函数调用(不是脚本)。请让我如何实现..?
采纳答案by Martin
Sure, just add &
after the command:
当然,只需&
在命令后添加:
read_cfg cfgA &
read_cfg cfgB &
read_cfg cfgC &
wait
all those jobs will then run in the background simultaneously. The optional wait
command will then wait for all the jobs to finish.
然后所有这些作业将同时在后台运行。然后可选wait
命令将等待所有作业完成。
Each command will run in a separate process, so it's technically not "multithreading", but I believe it solves your problem.
每个命令都将在单独的进程中运行,因此从技术上讲它不是“多线程”,但我相信它可以解决您的问题。
回答by mouviciel
Bash job control involves multiple processes, not multiple threads.
Bash 作业控制涉及多个进程,而不是多个线程。
You can execute a command in background with the &
suffix.
您可以在后台执行带有&
后缀的命令。
You can wait for completion of a background command with the wait
command.
您可以使用该wait
命令等待后台命令完成。
You can execute multiple commands in parallel by separating them with |
. This provides also a synchronization mechanism, since stdout of a command at left of |
is connected to stdin of command at right.
您可以通过将多个命令用 分隔来并行执行多个命令|
。这也提供了一种同步机制,因为左侧命令的标准输出|
连接到右侧命令的标准输入。
回答by tnorgd
You can run several copies of your script in parallel, each copy for different input data, e.g. to process all *.cfg files on 4 cores:
您可以并行运行脚本的多个副本,每个副本用于不同的输入数据,例如处理 4 个内核上的所有 *.cfg 文件:
ls *.cfg | xargs -P 4 -n 1 read_cfg.sh
The read_cfg.sh script takes just one parameters (as enforced by -n)
read_cfg.sh 脚本只接受一个参数(由 -n 强制执行)