微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为C ++应用程序启用核心转储通过apache – > Perl – > C ++调用

我有一个Web GUI,它提供了一个C ++应用程序的开/关控制。 C ++应用程序是从一个perl包装器调用的,它是保持程序运行的工作,如果它停止了,就重新启动它。

点击网页button(最终) 在后台启动startWrapper.pl 。

问题是C ++应用程序每隔几天崩溃一次segfault。 我想为这个后台任务启用核心转储。

然而,我读过的所有东西似乎都需要一个tty和/或login会话(例如ulimit命令)。

为什么Firefox继续谈判kerberos服务票?

与反向代理的Apache基本authentication问题

漂亮的URL与.htaccess

PHP中重新打开一个会话

WSDL2Java不会创build所有的存根

我将如何启用核心转储这个后台任务? 可以从C ++源代码中设置configuration吗? Linuxconfiguration文件

作为伪代码, startWrapper.pl ( startWrapper.pl )如下所示:

if (is_process_running() ) { return; } else { while (1) { system("/path/to/c++/application &"); while (1) { if (not_running_anymore()) break; sleep(10); } } }

编辑我点了答案太早。 如果我a)直接调用二进制文件或b)从perl包装器调用它,使用setrlimit工程。 但是,如果从Apache调用perl包装,它不会转储核心。 (我在程序中放了一个“炸弹”,在10秒后进行段错误,当从apache调用时,包装器检测到它并重新启动二进制文件,但没有核心文件

这可能是一些用户ID与有效的ID问题?

Apache启动Perl的包装为Apache 。 perl包装器使用system来启动setuid root的二进制文件

编辑II

手动启动

2016-08-17 13:50:35 : DvStorStartASIRecord.pl starting 2016-08-17 13:50:35 : DvStorStartASIRecord.pl: Starting DvASIRecord 0 0 2016-08-17 13:50:35 : DvASIRecord Current Dir: '/usr/local/dvstor/bin' 2016-08-17 13:50:35 : DvASIRecord Core Limits - Cur: 18446744073709551615 Max: 18446744073709551615 2016-08-17 13:50:35 : DvASIRecord: ASI recording started 0 0 2016-08-17 13:50:46 : DvStorStartASIRecord: DvASIRecord terminated unexpectedly. Restarting

通过Apache启动

2016-08-17 13:50:59 : DvStorOperation.cgi::startRecord() from 192.168.2.10 2016-08-17 13:50:59 : DvStorStartASIRecord.pl starting 2016-08-17 13:50:59 : DvStorStartASIRecord.pl: Starting DvASIRecord 0 0 2016-08-17 13:50:59 : DvASIRecord Current Dir: '/usr/local/dvstor/cgi-bin' 2016-08-17 13:50:59 : DvASIRecord Core Limits - Cur: 18446744073709551615 Max: 18446744073709551615 2016-08-17 13:50:59 : DvASIRecord: ASI recording started 0 0 2016-08-17 13:51:09 : DvStorStartASIRecord: DvASIRecord terminated unexpectedly. Restarting

编辑三

ps列出相关进程

FS UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 1 S root 1999 1 0 80 0 - 7525 poll_s Aug16 ? 00:00:01 /usr/sbin/httpd 5 S apache 2023 1999 0 80 0 - 7721 inet_c Aug16 ? 00:00:02 /usr/sbin/httpd 5 S apache 2024 1999 0 80 0 - 7721 inet_c Aug16 ? 00:00:02 /usr/sbin/httpd 5 S apache 2025 1999 0 80 0 - 7719 inet_c Aug16 ? 00:00:02 /usr/sbin/httpd 5 S apache 2026 1999 0 80 0 - 7719 inet_c Aug16 ? 00:00:02 /usr/sbin/httpd 5 S apache 2027 1999 0 80 0 - 7719 inet_c Aug16 ? 00:00:02 /usr/sbin/httpd 5 S apache 2028 1999 0 80 0 - 7721 inet_c Aug16 ? 00:00:02 /usr/sbin/httpd 5 S apache 2029 1999 0 80 0 - 7721 inet_c Aug16 ? 00:00:02 /usr/sbin/httpd 5 S apache 2030 1999 0 80 0 - 7721 inet_c Aug16 ? 00:00:02 /usr/sbin/httpd 5 S apache 27793 1999 0 80 0 - 7719 inet_c 09:47 ? 00:00:00 /usr/sbin/httpd 0 S apache 29436 1 0 80 0 - 1315 hrtime 09:48 ? 00:00:00 /usr/bin/perl /usr/local/dvstor/bin/DvStorStartASIRecord.pl tsNum=0 4 S root 29573 1 3 -40 - - 26599 hrtime 09:49 ? 00:00:00 /usr/local/dvstor/bin/DvASIRecord 0 2

Cloudera:在HDFS例外中上传文件

VirtualBox wordpressredirect到端口80

如何使用mongo连接器将数据从mongodb导入到apache solr

什么改变.htaccess所以它停止显示子域

如果django项目在子文件夹和子域中,如何编写.htaccess?

是的,可以从C ++代码设置系统限制。 看getrlimit , setrlimit函数

#include <sys/resource.h> rlimit limitValue; limitValue.rlim_cur = RLIM_INFINITY; limitValue.rlim_max = RLIM_INFINITY; setrlimit(RLIMIT_CORE,&limitValue);

RLIMIT_CORE表示核心大小RLIM_INFINITY – 无限制rlim_cur – 软限制rlim_max – 硬限制

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐