Linux下关闭udhcpc客户端时,通知服务器释放租约

简述

        最近遇到一个dhcp相关的问题,就是我的设计模式有两种一种是自动获取ip服务,另一个种是手动配置ip服务;当我切换自动获取ip时会向服务器申请一个动态的ip,通常做法是使用命令在后台打开一个udhcpc客户端,然后通过客户端向服务器申请租约;当我切换手动配置ip时,通常是手动输入一个ip然后检测这个ip是否被占用,没有被占用则配置;

        现在的想法是由于之前是自动获取ip的,后台有一个udhcpc客户端进程存在,而且路由器中的DHCP设备列表中也存在之前动态申请的ip地址;当我从自动获取ip切换到手动配置ip时,想要释放租约并且从路由器中的DHCP设备列表中移除已申请的ip地址,然后再关闭udhcpc客户端(为什么不是先关闭udhcpc客户端再解除租约,因为解除租约是依靠udhcpc客户端与路由器的服务端通信);

动态申请IP

        首先使用udhcpc动态申请一个ip:

udhcpc -b -i eth0 -R
-q:表示得到组月后退出;
-b:表示在后台运行;
-i:如果存在多网卡时需要指定网卡名;
-R:表示udhcpc客户端程序退出后通知服务器释放租约;

释放租约

        可能有人会疑惑使用kill、pkill或者killall杀死udhcpc客户端时不会通知服务器释放租约吗,明明申请ip的时候带了-R参数?正常情况下比如申请的时候带了-q参数,得到租约后自动退出前会通知服务器释放租约;但是使用kill、pkill或者killall杀死udhcpc客户端并不是正常的退出,而是强制关闭,所以不会通知服务器释放租约;

        正确释放租约可以通过给udhcpc客户端进程发送一个USR2(开发板平台)或者SIGUSR2(linux平台)信号,然后再通过kill(通过pid关闭单个进程)或者killall(通过进程名称关闭这个名称下的所有进程):

// 开发板平台下:先通过USR2信号释放租约,然后再通过第二条命令关闭进程
kill -SR2 pid;kill pid
killall -SR2 udhcpc;killall udhcpc

// linux平台下:先通过SIGUSR2信号释放租约,然后再通过第二条命令关闭进程
kill -SIGUSR2 pid;kill pid
killall -SIGUSR2 udhcpc;killall udhcpc
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ilson_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值