Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何定义C软件中的崩溃点_C_Networking - Fatal编程技术网

如何定义C软件中的崩溃点

如何定义C软件中的崩溃点,c,networking,C,Networking,第一:为我的英语不好道歉 很抱歉这个软件新手的问题,但我迷失了自己的逻辑 一点背景: 我正在从事一个C网络项目,在这个项目中,我试图生成一个服务器,在不断增加的时间内接收逐渐增加的UDP消息。我只是尝试在这个服务器上创建一个简单的“管理器”,当它崩溃时,它能够将报告发送到特定的地址 我想到的是,我将这个管理器设置为服务器端的侦听器。因此,如果服务器在预定义端口内未接收到任何消息,我假设服务器出现故障。 但是,不知何故,这不是一种确定性的方法。如果此服务器崩溃,我应该指定多长时间?(如果在5分钟内

第一:为我的英语不好道歉

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

一点背景:

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

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

我在想像gdb这样的应用程序是如何做到这一点的。如果服务器(框架)崩溃,它将自动生成一个coredump文件。我需要做类似的事情,所以当框架崩溃时,它将像打印“hello崩溃”一样简单。如何在服务器上创建“管理器”,以便在服务器崩溃时向我提供报告(使用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
您可以选择针对故障情况或信号情况重新启动服务器


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

您是指崩溃(应用程序意外退出)还是挂起(应用程序停止响应,但不退出)?另外,您是否定义“失去网络连接”作为崩溃?@wallyk:作为意外存在。@heike:您的问题是关于远程UDP客户端如何知道服务器不在那里,或者服务器机器上的程序如何监视服务器程序以查看其是否崩溃?@BenJackson:很抱歉造成混淆。我需要在服务器上安装一个程序,可以监视它是否崩溃。这个答案假设服务器运行的是POSIX。考虑到GCC的参与,这是一个公平的假设,但无论如何值得指出。@ben jackson:谢谢。但是你能告诉我什么是128出口吗。我在任何地方都找不到它。@heike我应该指出
wait()
手册页(参见eg),其中解释了宏
WIFSIGNALED()
和朋友。在我的shell示例中,我正在以一种在C程序中看不到的方式测试(然后取消设置)位
0x80