我编写了一个脚本来将hostapd模式ap更改为sta,将sta更改为ap,持续运行几个小时,netifd的进程挂了。
cat proc/id/maps
0400000-0041f000 r-xp 00000000 1f:06 1176 /sbin/netifd
0042f000-00430000 rw-p 0001f000 1f:06 1176 /sbin/netifd
**00430000-00476000 rwxp 00000000 00:00 0 [heap]**
772af000-7730a000 r-xp 00000000 1f:06 144 /lib/libuClibc-0.9.33.2.so
00400000-0041f000 r-xp 00000000 1f:06 1176 /sbin/netifd
0042f000-00430000 rw-p 0001f000 1f:06 1176 /sbin/netifd
**00430000-00477000 rwxp 00000000 00:00 0 [heap]**
772af000-7730a000 r-xp 00000000 1f:06 144 /lib/libuClibc-0.9.33.2.so
我发现进程堆在不断上升。无法修复它。
更改 ap 的模式,hostapd 将进行拆卸和设置。并且netifd的进程堆正在上升。
最后它导致
netifd/wireless.c
wireless_device_run_handler()->netifd_start_process()
netifd/main.c
netifd_start_process()->
if ((pid = fork()) < 0)
goto error;
分叉失败是因为
日志
netifd_start_process>>>>>>>>after fork create
error on triggering 12: Cannot allocate memory
(随着脚本运行,netifd 堆使用越来越多的内存)
脚本的一部分
uci set wireless.@wifi-iface[$1].mode="$apmode"
uci commit wireless