天天看点

程序运行一段时候,由于定时调用system产生段错误

在工程下,程序运行一段时间后,产生段错误.

定位到是由于定时调用system产生的.

经过无穷无尽的修改代码,一直不行.

刚开始考虑是inline,后来又检查栈,之后又用进程,后来改用守护进程.

在经过无穷无尽的探索后,最终仅仅是把system的库代码移植进工程里面,不调用库的system,而改为自己移植进的system,竟然好了.

而且程序运行时,音频也不顿,性能也好了,百思不得其解.

写在这里面,以此纪念.缅怀我这几天的努力.

int system_fuc(char *cmdstr)

{

int wait_state = -1;

int     pid = -1;

__sighandler_t save_quit;

__sighandler_t save_int;

__sighandler_t save_chld;

if (NULL == cmdstr)

{

return 1;

}

save_quit = signal(SIGQUIT, SIG_IGN);

save_int = signal(SIGINT, SIG_IGN);

save_chld = signal(SIGCHLD, SIG_DFL);

if ((pid = vfork()) < 0)

{

signal(SIGQUIT, save_quit);

signal(SIGINT, save_int);

signal(SIGCHLD, save_chld);

return -1;

}

else if (0 == pid)

{

signal(SIGQUIT, SIG_DFL);

signal(SIGINT, SIG_DFL);

signal(SIGCHLD, SIG_DFL);

execl("/bin/sh", "sh", "-c", cmdstr, (char *)0);

_exit(127);

}

signal(SIGQUIT, SIG_IGN);

signal(SIGINT, SIG_IGN);

if (waitpid(pid, &wait_state, 0) == -1)

{

wait_state = -1;

}

signal(SIGQUIT, save_quit);

signal(SIGINT, save_int);

signal(SIGCHLD, save_chld);

return wait_state;

}

继续阅读