天天看點

程式運作一段時候,由于定時調用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;

}

繼續閱讀