最近需要在c工程的mian函数中使用system函数调用一个shell脚本,shell脚本是用来将某些系统配置通过sock通信发送给主核进程,但是可能出现偶发性的配置失败情况,经过分析可以大概断定是由于sock通信的时候,主核进程正在忙于其他事物导致未能在expire之前将消息接受并处理,导致消息丢失,而发送方无法感知系统是否成功加载配置。
所以,需要在脚本的最后启动一个python脚本去查询并校验配置结果。如果,校验失败且再最大重试次数以内的话,则重新发送配置并再次进行校验。但是,经过如下代码的验证,c语言中调用system()是阻塞型调用,会导致主进程等待,是不符合预期设计的。
main.c
-----------------------------------------------
#include <stdlib.h>
#include <stdio.h>
int main()
{
system("/Users/heihei/Desktop/slp.cfg");
printf("I ..........!\n");
return 0;
}
slp.cfg
-----------------------------------------------
python /Users/heihei/Desktop/s.py
s.py
-----------------------------------------------
import time
if __name__ == "__main__":
time.sleep(60)
print("python test")
编译运行上述代码(等待60s后)会出现如下结果:
解决办法很简单就是将slp.cfg改为:
slp.cfg
-----------------------------------------------
python /Users/heihei/Desktop/s.py &
即可在后台运行了!