我有一个参数数组,将在我的shell脚本的命令中使用。我希望能够做到这一点
./runtests.sh -b firefox,chrome,ie
这里的每个命令都会启动一个单独的线程(目前我们通过打开多个终端并在那里启动命令来进行多线程处理)
我已将输入的命令推送到数组中:
if [[ $browser == *","* ]]; then
IFS=',' read -ra browserArray <<< "$browser"
fi
现在,我必须在循环遍历数组时启动一个单独的线程(或进程)。有人能引导我朝正确的方向发展吗?我在sudo代码中的猜测类似于
for (( c=0; c<${#browserArray}; c++ ))
do
startTests &
我是在正确的轨道上吗?
答案 0 :(得分:1)
这不是一个主题,而是一个background process。它们很相似,但是:
因此,有效地我们可以说线程和轻量级过程是相同的。
轻量级进程(LWP)与正常进程之间的主要区别在于LWP共享相同的地址空间和其他资源(如打开文件等)。由于某些资源是共享的,因此这些进程被认为是轻量级的其他正常过程因此称为轻量级过程。
注意:为清晰起见重新排序
What are Linux Processes, Threads, Light Weight Processes, and Process State
您可以使用jobs
命令查看正在运行的后台进程。 E.g:
nick@nick-lt:~/test/npm-test$ sleep 10000 &
[1] 23648
nick@nick-lt:~/test/npm-test$ jobs
[1]+ Running
您可以使用fg
:
nick@nick-lt:~/test/npm-test$ fg 1
sleep 1000
光标将等待,直到睡眠时间结束。您可以通过按fg 1
(CTRL-Z
)暂停工作,因为它位于前台(如SIGTSTP
之后的方案中),如下所示:
[1]+ Stopped sleep 1000
并输入以下内容恢复:
bg 1 # Resumes in the background
fg 1 # Resumes in the foreground
并且可以通过按CTRL-C
(SIGINT
)将其删除,前提是刚刚结束进程,或者使用带有{{1}的kill命令附加到%
ID:
jobs
在您的实施中:
kill %1 # Or kill <PID>
可以被称为:
BROWSERS=
for i in "${@}"; do
case $i in
-b)
shift
BROWSERS="$1"
;;
*)
;;
esac
done
IFS=',' read -r -a SPLITBROWSERS <<< "$BROWSERS"
for browser in "${SPLITBROWSERS[@]}"
do
echo "Running ${browser}..."
$browser &
done
Tadaaa。