本人在做一个守护进程检查QT app是否死机的任务:QT app每一秒发送udp心跳包给守护进程,守护进程一旦隔一定的时间没收到这个心跳包(意味着QT进程挂了)就重启系统。
现在做了四个实验:
1):把QT的app和守护进程的的iP设置虚拟机本身,在不同的终端开启这两个进程,udp通信正常。
2):把QT app下载到开发板中,向虚拟机中的守护进程发送udp包,虚拟机中的守护进程能够收到心跳包。
3):把守护进程下载到开发板中,在虚拟机中通过QT app发送udp包给守护进程,守护进程能收到心跳包
4):把QT app和守护进程下载到开发板中,两进程的ip设置为开发板ip地址,发现守护进程没收到QT进程的udp包(能过确认QT的udp包已经发送成功)
在做第四个实验的时候在启动文件/etc/profile中间中加入两行
./QtApp -qws
./shouhuApp 只能启动第一个进程,后来将第一个进程改为在后台运行(./QtApp -qws &)这样两个进程在开机就都能过启动。
在虚拟机中和开发板中的代码完全一样(除了ip地址),当时就想不通为什么这样,利用ifconfig命令查看的时候在虚拟机中有两个网络功能:
而在嵌入式开发板中只有eth0,没有lo(127.0.0.1)回环,
于是把QT和守护进程的ip设置为127.0.0.1,在终端输入命令ifconfig lo up启动回环功能,再进行上面的第四种情况的实验,udp通信正常。