![如何将中止进程的详细信息捕获到日志文件中](https://linux22.com/image/710634/%E5%A6%82%E4%BD%95%E5%B0%86%E4%B8%AD%E6%AD%A2%E8%BF%9B%E7%A8%8B%E7%9A%84%E8%AF%A6%E7%BB%86%E4%BF%A1%E6%81%AF%E6%8D%95%E8%8E%B7%E5%88%B0%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%E4%B8%AD.png)
在 Debian 下,守护进程启动并运行,直到它随机崩溃。我发现它有时会由于断言而中止,如果进程在前台运行,则会显示断言,例如:
/usr/include/boost/smart_ptr/shared_ptr.hpp:424: T* boost::shared_ptr::operator->() const [with T = libcage::dht::query]: 断言“px != 0”失败。已中止
退出代码是 134,但是如果进程在后台运行,如何将更详细的错误描述(可能有很多不同)保存到日志文件中以供稍后分析?
“2> /log/mylogfile” 不写入任何内容,“> /log/mylogfile” 忽略中止消息,写入进程输出。此外,“dmesg” 或 “kern.log” 中也没有任何内容。
答案1
您可以使用strace
查看哪里出了问题。它将记录使用的系统调用、信号和返回值。
strace -v -s 256 -D -o /tmp/daemonlog daemonapp
您只需查看执行详情即可。
-v:打印环境
-s 字符串大小:256 字节
-D 以分离的孙子进程形式运行 strace
-o 日志文件
答案2
如果你的守护进程使用“bash 脚本”,请在脚本开头添加“set -x”,然后重新启动进程并查看