c++ - Linux 是否记录守护进程抛出的未捕获异常?

标签 c++ linux events exception daemon

我用 C++ 编写了一个 Linux 守护进程。代码是这样的:

int main(int argc, char** argv)
{
    daemon(1, 0); // Daemonize itself, retaining the current working directory and redirecting stdin, stdout and stderr to /dev/null.
    // My program logic goes here
}

问题是,我的程序逻辑偶尔会抛出异常。我如何捕获异常以便知道哪里出了问题?

我知道对于一个普通的控制台应用程序,未捕获的异常将被转储到控制台。在我的例子中,在调用 daemon(1, 0) 之后,控制台不再可访问。

在 Windows 上,任何未捕获的异常都将由操作系统保存,并可以通过计算机管理中的事件查看器查看。 Linux 上有没有类似的机制?

最佳答案

您有两个解决方案:

  • 一:你把对守护函数的调用改成

    daemon(1,1);
    

    这将使程序仍然可以访问标准输出,随后将保留将未捕获的异常转储到控制台的默认行为。

  • 二:你不改变调用,但是你添加一个全局的try { /* main code here */ } catch(...){ /* logging code here */ }将任何未捕获的异常记录到文件中。

关于c++ - Linux 是否记录守护进程抛出的未捕获异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13219105/

相关文章:

javascript - angular $broadcast 和 $on 贵吗?

javascript - 如果两个事件都发生,如何仅触发其中一个事件?

android - NDK c++ 从文件 Android 加载着色器

c++ - x86、C++、gcc 和内存对齐

regex - 仅从 CSV 的第二个字段中删除 ":"并忽略其他字段

linux - 如何从用户 1 切换到用户 2 并在 linux 中运行一些命令?

linux - 使用 Getopts 传递多个强制标志的问题

带有延迟的 JavaScript 事件处理滚动事件

c++ - shared_ptr 到数组

C++ Eigen多线程中Array操作