unix 从单个父数组示例化具有自己PID的唯一bash示例

uqxowvwt  于 2023-10-18  发布在  Unix
关注(0)|答案(1)|浏览(148)

我得到了一个命令“ChanDataStream_Sim”(在Linux机器上),我需要同时运行40个通道。该命令一旦执行就会无限期地运行,直到有人手动杀死PID。此外,如果中断或会话结束,命令将停止。需要为我们要测试的每个通道启动一个新的专用PuTTy会话。
我想做的是示例化一个命令的示例与我的数组中的通道的每个迭代。本质上,如果我在数组中列出30个通道,我希望看到30个命令行示例(具有自己的PID)正在运行。我想避免让工程师打开40个PuTTy会话只是为了运行这个东西,或者如果可能的话,不得不制作40个小脚本。
预期结果:

PID      User
1112     ChanDataStream_Sim+ <--- For Channel 3002
1113     ChanDataStream_Sim+ <--- For Channel 1001
1114     ChanDataStream_Sim+ <--- For Channel 4003
1115     ChanDataStream_Sim+ <--- For any additional channels in the array

这是我目前为止写的。

#bash
#!/bin/bash

# all the channels to simulate data flow against.
channels=(3002 1001 4003)

# how fast the simulated data should hit the channel
priority=(IDLE REALTIME HIGH)

# selecting one of the 225 daemons available for the process to run against
objserv=(83 82 81)

length=${#channels[@]}
for (( i=0; i<$length; i++ ))
do

# running the command with the requisite channel variables
ChanDataStream_Sim ${channels[$i]} -d -p ${priority[$i]} -s ${objserv[$i]}
done

任何线索将不胜感激。

djmepvbi

djmepvbi1#

解决方案:此代码段根据数组中的通道数创建嵌入命令的迭代

#bash
#!/bin/bash
# Testing Channels: 1001, 2001, 2004

# Setting up my channels and openChan_sim controls
channels=(3002 1001 4003)
priority=(REALTIME REALTIME REALTIME)
objserv=(83 82 81)

# Get the length of one of the arrays
length=${#channels[@]}

# Function to perform the iteration in a subshell
perform_iteration() {
    local index=$1
    openChan_sim ${channels[$index]} -d -p ${priority[$index]} -s ${objserv[$index]}"
}

# Loop through the channels and create subshell instances
for ((i=0; i<length; i++))
do
    (perform_iteration "$i") &
done
wait

相关问题