c - 如何在 C 软件中定义崩溃点

标签 c networking

首先:为我糟糕的英语道歉。

很抱歉这个新手软件问题,但我迷失了自己的逻辑......

一些背景:

我正在开发一个 C 网络项目,我试图生成一个在增加的时间内接收逐渐增加的 UDP 消息的服务器。我只是尝试在该服务器上创建一个简单的“管理器”,以便在崩溃时能够将报告发送到特定地址。

我想到的是,我将此管理器设置为服务器端的监听器。因此,如果服务器在预定义端口内没有收到任何消息,我认为服务器出现故障。 但是,无论如何,这并不是一种确定性的方法。如果该服务器崩溃,我应该指定多长时间? (如果5分钟内端口没有收到消息,是否意味着它正在崩溃?不一定是真的。我可以再次将其增加到10分钟,但再次,这是不合理的和不一致的)

我在想像 gdb 这样的应用程序如何做到这一点。如果服务器(框架)崩溃,它会自动生成一个 coredump 文件。我需要做类似的事情,所以当框架崩溃时,它就像打印“hello crash”一样简单。如何在服务器上创建一个“管理器”,以便在服务器崩溃时向我提供报告(使用 C )

任何想法将不胜感激

非常感谢

最佳答案

进程的退出代码告诉您信号是否导致其退出。您可以编写一个 C 程序并使用 wait() 获取退出代码或在 shell 脚本中执行此操作:

#!/bin/sh

./server "$@"

EXIT=$?

if [ $EXIT -eq 0 ]
then
    echo exit success
else
    if [ $EXIT -ge 128 ]
    then
        echo exited with signal $(($EXIT - 128))
    else
        echo exited with code $EXIT
    fi
fi

您可以选择针对失败情况或信号情况重新启动服务器。

大多数服务器依赖于仔细的调试,并且不希望在崩溃时自动捕获并重新启动。

关于c - 如何在 C 软件中定义崩溃点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8918761/

相关文章:

C 回显服务器,回显一个句子后不能正常工作

c - 递归方法不适用于二叉搜索树

networking - 识别慢启动阶段的结束

c - 您可以在一个套接字接收调用中获得两个数据包以进行多播吗?

c# - CPU占用问题

c - scanf()将新行char留在缓冲区中

打印整数(由用户输入)的 C 程序当数字很大时输出错误

我可以包装 gcc 的原子内置函数吗?

windows - Docker for Windows - 访问本地网络中的容器

java - Android - 解析JSON数据显示重复结果