Linux &引用;killall wpa“请求者”;“影响”;ip路由添加…”;以一种奇怪的方式
不确定标题是否正确地解释了我的情况,但详细情况如下: 我正在编写一个简单的bash脚本,使用wlp2s0接口设置无线网络Linux &引用;killall wpa“请求者”;“影响”;ip路由添加…”;以一种奇怪的方式,linux,bash,networking,wpa,Linux,Bash,Networking,Wpa,不确定标题是否正确地解释了我的情况,但详细情况如下: 我正在编写一个简单的bash脚本,使用wlp2s0接口设置无线网络 ip route flush dev wlp2s0 ip addr flush dev wlp2s0 ip link set wlp2s0 down killall wpa_supplicant ip link set wlp2s0 up ip addr add 192.168.1.200/24 dev wlp2s0 ip route add default via 19
ip route flush dev wlp2s0
ip addr flush dev wlp2s0
ip link set wlp2s0 down
killall wpa_supplicant
ip link set wlp2s0 up
ip addr add 192.168.1.200/24 dev wlp2s0
ip route add default via 192.168.1.1
wpa_supplicant -B -D wext -i wlp2s0 -c wireless.conf
它杀死了所有之前开始的wpa_恳求者,然后开始一个新的。
现在,问题是,killall
呼叫导致ip-route-add
哭泣:
RTNETLINK回答:无法访问网络
不管wpa_恳求者之前是否真的开始了
可以通过在killall
之后添加sleep 1
调用来“修复”,但我当然希望避免这种情况。也可以通过删除killall
命令并在脚本之前手动调用它来修复此问题
因此,问题是-我如何解决killall
的这种奇怪行为?也许有人知道为什么会发生这些奇怪的事情
编辑:
ip-route-add
如果之前未调用killall
,则不会给出该错误。为什么您认为这很奇怪?成功返回killall
并不一定意味着wpa_-supplicant
已完成对传入的SIGTERM
信号的处理。只是信号最多只能传送到wpa\u请求者
进程。Pehapswpa\u-suplicant
需要更多的时间(例如sleep 1
)来完成其清理处理程序的执行(wpa\u-suplicant\u terminate\u proc()
中的wpa\u-suplicant.c
)
TIMEO=5
for ((i=0; i<TIMEO; ++i)); do
if pidof -s wpa_supplicant > /dev/null; then
sleep 1
else
break
fi
done
if ((TIMEO==i)); then
echo "timeout"
else
echo "it's gone"
fi
TIMEO=5
对于((i=0;i/dev/null;然后
睡眠1
其他的
打破
fi
完成
如果((TIMEO==i));则
回显“超时”
其他的
回声“它不见了”
fi
假设不会有多个
wpa\u-supliciant
的实例,ip-route-add
在之前没有调用killall
的情况下也会这样说吗?不,如果之前没有调用killall
,它会像预期的那样工作。哇,非常感谢您这样详细的解释。好吧,这有点离题了,bu有没有一种“好”的方法来等待实际的进程终止,安装sleep 1
?@ValeriyStreltsov查看我的更新。但这不过是一种复杂的方法来执行sleep 1
…你可以用wait$(pidof-s wpa_-supplicant)
来代替轮询