我想在我的shell脚本中引入多线程功能。Bash中的多线程
我有一个脚本,它调用具有不同参数的函数read_cfg()
。 这些函数调用都是独立的。
是否可以并行地实例化这些函数调用(不是脚本)。 请让我怎么做到这一点..?
我想在我的shell脚本中引入多线程功能。Bash中的多线程
我有一个脚本,它调用具有不同参数的函数read_cfg()
。 这些函数调用都是独立的。
是否可以并行地实例化这些函数调用(不是脚本)。 请让我怎么做到这一点..?
当然,只是添加&
指令后:
read_cfg cfgA &
read_cfg cfgB &
read_cfg cfgC &
wait
所有这些工作将随后在后台同时运行。可选的wait
命令将等待所有作业完成。
每个命令都会在一个单独的进程中运行,所以它在技术上不是“多线程”,但我相信它可以解决您的问题。
Bash作业控制涉及多个进程,而不是多线程。
您可以使用&
后缀在后台执行命令。
您可以等待使用wait
命令完成后台命令。
您可以通过将它们与|
分开来并行执行多个命令。这也提供了同步机制,因为在|
左边的命令的标准输出连接到右边的命令标准输出。
您可以并行运行多个脚本副本,每个副本用于不同的输入数据,例如,处理所有* .cfg文件保存于4芯:
ls *.cfg | xargs -P 4 -n 1 read_cfg.sh
的read_cfg.sh脚本只接受一个参数(如强制执行由-N)
只是一个说明,你应该指定'read_cfg.sh'或'xargs'的完整路径将会说它找不到该文件。 – Jeshurun 2013-07-16 10:22:14
更好地使用'printf'%s \ 0'* .cfg | xargs -0 ...' - 这种方式适用于带有空格,不可打印字符等的文件名。另请参阅[为什么不应该解析ls(1)的输出](http://mywiki.wooledge.org/ParsingLs)。 – 2016-09-21 22:49:28
这不是多线程 - 这是多。每个实例都运行在一个独特的过程中,用'fork()'从原始复制过来。这些进程 - 与线程不同 - 具有它们自己的文件描述符表,并且它们的内存是写入时拷贝(因此,当它们更改变量的值时,父进程不会看到它)。 – 2016-09-21 22:48:47