慎重在linux平台上使用c++中调用system API
the SIG_IGN for SIGCHLD will impect system function
SIGINT:ctrl+c 终止信号
SIGQUIT:ctrl+\ 退出信号
SIGSTOP:ctrl+z 暂停信号
SIGSCONT:ctrl+z 继续信号
SIGALRM:闹钟信号 收到此信号后定时结束,结束进程
SIGCHLD:子进程状态改变,父进程收到信号
SIGKILL:杀死信号
https://www.cnblogs.com/LiuYanYGZ/p/5838497.html
点击查看代码
```c++typedef void (*sighandler_t)(int);
int pox_system(const char *cmd_line)
{
int ret = 0;
sighandler_t old_handler;
old_handler = signal(SIGCHLD, SIG_DFL);
ret = system(cmd_line);
signal(SIGCHLD, old_handler);
return ret;
}
if (signal(SIGCHLD, SIG_IGN) == SIG_ERR)
{
return -1;
}
else {
return 0;
}
</details>
通过signal(SIGCHLD, SIG_IGN)通知内核对子进程的结束不关心,由内核回收。如果不想让父进程挂起,可以在父进程中加入一条语句:signal(SIGCHLD,SIG_IGN);表示父进程忽略SIGCHLD信号,该信号是子进程退出的时候向父进程发送的。
但是SIG_IGN的使用,会导致系统函数system调用脚本失败。
建议多打印log信息
参考链接:
https://blog.csdn.net/cheng_fangang/article/details/8481929
https://blog.csdn.net/u010571844/article/details/50419798