Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux &引用;killall wpa“请求者”;“影响”;ip路由添加…”;以一种奇怪的方式_Linux_Bash_Networking_Wpa - Fatal编程技术网

Linux &引用;killall wpa“请求者”;“影响”;ip路由添加…”;以一种奇怪的方式

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

不确定标题是否正确地解释了我的情况,但详细情况如下:

我正在编写一个简单的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 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请求者
进程。Pehaps
wpa\u-suplicant
需要更多的时间(例如
sleep 1
)来完成其清理处理程序的执行(
wpa\u-suplicant\u terminate\u proc()
中的
wpa\u-suplicant.c

所以,我认为你真的需要睡眠1

更新 我总是依赖这样的投票方法

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)
来代替轮询