我想在我的shell脚本中引入多线程功能。
我有一个脚本,它调用不同参数的read_cfg()
函数。这些函数调用都是独立的。
是否可能并行实例化这些函数调用(而不是脚本)?请告诉我如何实现..?
我想在我的shell脚本中引入多线程功能。
我有一个脚本,它调用不同参数的read_cfg()
函数。这些函数调用都是独立的。
是否可能并行实例化这些函数调用(而不是脚本)?请告诉我如何实现..?
&
即可:read_cfg cfgA &
read_cfg cfgB &
read_cfg cfgC &
wait
所有这些作业都将同时在后台运行。 可选的wait
命令将等待所有作业完成。
每个命令将在单独的进程中运行,因此从技术上讲它不是"多线程",但我相信它可以解决你的问题。
您可以并行运行多个脚本副本,每个副本针对不同的输入数据,例如,在4个内核上处理所有*.cfg文件:
ls *.cfg | xargs -P 4 -n 1 read_cfg.sh
read_cfg.sh脚本只接受一个参数(由-n强制执行)。
read_cfg.sh
的完整路径,否则xargs
会提示找不到文件。 - Jeshurunprintf '%s\0' *.cfg | xargs -0 ...
-- 这样可以处理带有空格、不可打印字符等文件名。另请参阅 为什么不应该解析 ls(1) 的输出。 - Charles DuffyBash工作控制涉及多个进程,而不是多个线程。
您可以使用&
后缀将命令在后台执行。
您可以使用wait
命令等待后台命令完成。
您可以通过使用|
将多个命令并行执行。这也提供了同步机制,因为位于|
左侧的命令的标准输出连接到右侧命令的标准输入。
fork()
从原始进程复制而来。这些进程 -- 不像线程 -- 有自己的文件描述符表,并且它们的内存是写时复制的(所以当它们改变变量的值时,父进程看不到)。 - Charles Duffy