收到问题jira描述 • • [EM][] [工厂适应性问题]执行shell命令,系统反应慢 • 分析发现调用系统system函数执行命令的时间过长,每条命令执行约250ms。对比其它平台只需要20~50ms,请安排确认一下。 • 01-01 00:01:31.816 I/sita.common(1758): cmdstring is cp -rf /userdata/FactoryData.db/mnt/usb/sda/database/userdata/ • 01-01 00:01:31.817 I/sita.common( 1758):@_@[os_cmd_system] temp_cmd_string:busybox cp -rf /userdata/FactoryData.db/mnt/usb/sda/database/userdata/ • 01-01 00:01:31.817 I/sita.common( 1758):[os_cmd_system] temp_cmd_string:busybox cp -rf /userdata/FactoryData.db/mnt/usb/sda/database/userdata/ System_call 问题确认过程 Skyworth & 566TK对比数据 • Sky 562测试: • system(),测试如下: • [Serial-COM40619-152503-980]wysdebugcall system() begin1 0 • [Serial-COM40619-152504-553]00:21:97:11:03:30 • [Serial-COM40619-152504-582]wysdebugcall system() end1 • [Serial-COM40619-152504-584]wysdebugcall system() begin1 1 • [Serial-COM40619-152505-180]00:21:97:11:03:30 • [Serial-COM40619-152505-181]wysdebugcall system() end1 • 基本每次call system耗时600ms. • 566 TK 测试: • [20170620_16:17:13:448] wysdebugcall system() begin 0 • [20170620_16:17:13:557]00:21:00:87:00:01 • [20170620_16:17:13:557] wysdebugcall system() end 0 • [20170620_16:17:13:557] wysdebugcall system() begin 1 • [20170620_16:17:13:651]00:21:00:87:00:01 • [20170620_16:17:13:651] wysdebugcall system() end 1 • Skyworth 数据和tcl一致,566tk较快,但是566 ic性能较好. • 我一开始觉得这个不是主要因素. • Bug单的问题是pc串口工具和中间件通信超时. • 所以做了个实验写一个main函数测了一下时间 • gettimeofday(&t_start, NULL); • system("busybox su"); • gettimeofday(&t_end, NULL); • cost_time = t_end.tv_usec -t_start.tv_usec; • printf("Cost time: %ldus", cost_time); • 只有10ms大概 • 然后就回复客户请他们优化 • 把多个system call 命令组合一下 • 命令序列 ; & && || • ; 从左到右依次被执行,返回最后一个命令的执行状态 • & 该命令将在后台被执行,即在子bash中执行(或ctrl+z,bg, jobs,bg命令号)(变量$!、$one、$two、$three返回后台进程的pid号) • && 当且仅当左边的命令退出状态为0时,才执行右边的命令(Linux中0为执行成功,非0为失败) • || 当且仅当左边的命令执行失败时才会执行右边的命令 • 客户回复如下: • 张工: • • 目前的主要问题是执行一次fpi_system_shell_cmd()的时间过长,这个项目与其它项目相差太大。 •