下面的代码ping一组服务器,并检查它是正常运行还是停机。
如果我使用和不使用"disown“命令,我会得到不同的输出顺序。有没有人能解释一下发生了什么
111.111.111.229下跌。因此,该计算机将不会出现"server up“输出
带有Disown的代码
#set -vx
#!/bin/bash
check_server_status()
{
printf "IP inside fun is $1 \n"
ping -c 1 $1 > /dev/null
[ $? -eq 0 ] && echo Server with IP $i is up
}
for i in 111.111.111.{229..230}
do
printf "IP is $i \n"
check_server_status $i & disown
done
exit输出
IP is 111.111.111.229
IP is 111.111.111.230
IP inside fun is 111.111.111.230
IP inside fun is 111.111.111.229
Server with IP 111.111.111.230 is up没有断绝关系的代码
#set -vx
#!/bin/bash
check_server_status()
{
printf "IP inside fun is $1 \n"
ping -c 1 $1 > /dev/null
[ $? -eq 0 ] && echo Server with IP $i is up
}
for i in 111.111.111.{229..230}
do
printf "IP is $i \n"
check_server_status $i
done
exit输出
IP is 111.111.111.229
IP inside fun is 111.111.111.229
IP is 111.111.111.230
IP inside fun is 111.111.111.230
Server with IP 111.111.111.230 is up发布于 2019-11-12 15:10:48
你有没有在没有否认的情况下尝试过,但&仍然在那一行的末尾?
我想你会发现,这种差异不是由断绝关系造成的,而是由这种性格造成的。与号告诉shell将命令放到后台,而不是等待它,这意味着两个ping操作可以并行发生。时间是不可预测的,所以完全有可能您首先启动的ping函数实际上会被第二次执行。
https://stackoverflow.com/questions/58813571
复制相似问题