我遇到 Terminated due to signal 13 时是在APP退到后台返回前台时发生的报错
Signal 13 在不同的操作系统中可能代表不同的事物,但在许多基于 Unix 的系统中,包括 Linux 和 macOS,Signal 13 通常指的是 "Abort Signal"(SIGABRT)。当一个进程由于某些异常情况而需要被异常终止时,会发送这个信号;
以下是一些可能导致 "管道破裂" 的情况:
-
写入已关闭的管道:
最常见的情况是,一个进程尝试向一个已经被另一个进程关闭的管道写入数据。 -
不匹配的管道使用:
管道的读写两端没有正确匹配使用,可能导致写入端不知道读取端已经关闭。 -
子进程异常退出:
如果一个进程在读取管道的一端异常退出,而另一个进程仍然尝试向管道写入,就可能发生管道破裂。 -
非正常关闭:
进程非正常关闭(如由于信号或异常)可能导致管道状态不一致。
解决方案:
1、如果你的项目中有用到socket, 需要在写入数据时提前设置SO_NOSIGPIPE:
int nosigpipe = 1;
setsockopt(socketFD, SOL_SOCKET, SO_NOSIGPIPE, &nosigpipe, sizeof(nosigpipe));
2、如果是用了第三方库,只需要在你调用你的SDK之前,调用如下代码
signal(SIGPIPE, SIG_IGN)
即可
网友评论