我正在尝试制作一个使用 hostapd 启动/停止访问点的 bash 脚本。
我们有一个极端情况,我们想尽快切换到另一个 wifi 频道,并且由于 hostapd 不支持即时频道交换,我们必须:
- 杀死进程
- 更改配置文件
- 再次启动hostapd。
我决定将信号从主应用程序发送到此脚本(USR1 和 USR2)来执行此操作,但我没有得到预期的结果。我总是首先收到第二个信号,所以它不起作用。我试图在代码中添加一个 sleep(1) 以使其工作,但这不是一个优雅的解决方案。
这是我正在使用的 c++ 行,
killAP();
sleep(1);
generateAP();
这就是脚本。
#!/bin/ash
TASKS=''
enqueueLaunch () {
TASKS="$TASKS launch"
}
enqueueKill () {
TASKS="$TASKS kill"
}
launchAP () {
logger -t LAUNCH Launching AP--.
/scripts/launchAP
logger -t LAUNCH DONE
}
killAP () {
logger -t KILL Killing AP
PID=`cat /var/run/wifi-phy0.pid`
kill -9 $PID
iw wlan0 del
rm -f /var/run/wifi-phy0.pid
logger -t KILL DONE
}
parse () {
for i in $@ ; do
case "$i" in
"launch")
launchAP
;;
"kill")
killAP
;;
esac
done
}
echo $$ > /var/run/hostapd-sh.pid
trap enqueueLaunch SIGUSR1
trap enqueueKill SIGUSR2
while :
do
if [ ! -z "$TASKS" ] ; then
parse $TASKS
TASKS=""
fi
sleep 1
done
欢迎任何想法。
非常感谢!!