我正在使用 bash 中的多个对话框屏幕编写脚本。脚本的功能之一应该是杀死特定的进程。我将所有 PID 值加载到一个名为 pid 的数组中:
pid = ('1234' '1233' '1232' '1231' '1230')
然后我向用户展示了一个包含进程列表的对话框清单。在他们选择其中一些后,对话框会返回清单条目编号,例如 0、2、4。
我最初的计划是将选定的条目存储在第二个数组中,然后使用它从第一个数组中获取特定的 PID,但到目前为止,我没有尝试过任何工作,在本例中为:1234、1232、1230。所以我可以杀死那些特定的进程。
有没有人有更好的解决方案?我想要基于用户在对话框清单中所做的选择来杀死进程的最简单方法。
这是有问题的功能:
stop_tunnel() {
local tunnels
local pid
declare -a tunnels
declare -a pid
#this is executed on a remote system in the real script
ps aux | grep -w ssh > $_temp
awk -F "ssh" '{print "ssh" $2}' $_temp > $_temp1
awk '{print $2}' $_temp > $_temp2
IFS='
'
tunnels=( $( < $_temp1 ) )
pid=( $( < $_temp2 ) )
dialog --checklist "Select tunnel to stop:" 10 72 0 \
0 "${tunnels[0]}" off \
1 "${tunnels[1]}" off \
2 "${tunnels[2]}" off \
3 "${tunnels[3]}" off \
4 "${tunnels[4]}" off \
2>$_temp
nr=$( < $_temp )
dialog --title " Tunnel stop " --msgbox "\nYou stopped these tunnels: ${nr[@]}" 6 44
}
nr 数组保存用户选择。我想用它把特定的成员从 pid 数组中拉出来。