持之以恒

导航

慎重在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

posted on 2021-09-27 22:40  beilei  阅读(202)  评论(0编辑  收藏  举报