- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
进程?-6ren"> 进程?-我有一个在 Ubuntu 10.04 上用 C++ 编写的“ Mongoose 网络服务器”上运行的 CGI 脚本(为了将来的可移植性独立于 Mongoose 特定的 API)。每当我从网络浏览器 (-6ren">
我有一个在 Ubuntu 10.04 上用 C++ 编写的“ Mongoose 网络服务器”上运行的 CGI 脚本(为了将来的可移植性独立于 Mongoose 特定的 API)。每当我从网络浏览器 (Chrome) 调用脚本时,该过程运行正常,但是当我运行 ps -al
时,我看到了
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 3567 8877 0 80 0 - 23309 hrtime pts/0 00:00:00 mongoose
4 Z 0 3585 3567 7 80 0 - 0 exit pts/0 00:00:00 test <defunct>
在这种情况下,我使用 sudo kill -9 3567
来终止父进程。我的脚本中有以下代码。
...
#include <sys/wait.h>
...
//==========================================================================
// Define the function to be called when ctrl-c (SIGINT) signal is sent to process
static void signal_callback_handler(int signum)
{
point_of_inspection( __FILE__, __func__, __LINE__, ENABLE_LOG); // Entered the routine
// Cleanup and close up stuff here
while(1)
{
if (signum == SIGTERM)
{
error_log_report("caught signal - premature exit",CAUGHT_SIGNAL_ERROR,ENABLE_LOG);
break;
}
}
clean_exit();
// Terminate program
exit(signum);
}
//======================= Zombies or <defunct> handler ========================
// Signal handler to process terminated children
static void mysig(int nsig)
{
int nStatus, nPid;
while(1)
{
if (nsig == SIGCHLD)
{
nPid = waitpid(-1, &nStatus, WNOHANG);
if(nPid<0)
{
error_log_report("waitpid (nPid<0)",CAUGHT_SIGNAL_ERROR,ENABLE_LOG);
break;
}
if(nPid==0)
{
error_log_report("Caught Signal - Zombies <defunct> (nPid==0)",CAUGHT_SIGNAL_ERROR,ENABLE_LOG);
break;
}
}
}
clean_exit();
exit(nsig);
}
在主函数中
int main()
{
//some initialization variables
...
// Register signal and signal handler
signal(SIGTERM, signal_callback_handler);
// To clean up terminated children
signal(SIGCHLD, mysig);
...
return 0;
}
但是,当用户关闭网络浏览器或导航到不同的页面时,它似乎没有捕捉到任何触发的信号,因为我没有看到任何日志。我想知道这是否是 mongoose 或我的脚本中的错误(我没有在我的脚本中使用任何 fork() 进程或线程。但是 mongoose 确实使用线程。而且我没有在我的脚本中使用任何 mongoose 网络服务器特定的 API。) .
我指的是这里的信号教程 http://orchard.wccnet.org/~chasselb/linux275/ClassNotes/process/sigbasics.htm和 http://www.gnu.org/s/hello/manual/libc/Process-Completion.html
最佳答案
他们更新了 mongoose.c 文件中的代码来收割僵尸。以下是部分代码。
#if !defined(_WIN32) && !defined(__SYMBIAN32__)
// Ignore SIGPIPE signal, so if browser cancels the request, it
// won't kill the whole process.
(void) signal(SIGPIPE, SIG_IGN);
// Also ignoring SIGCHLD to let the OS to reap zombies properly.
(void) signal(SIGCHLD, SIG_IGN);
#endif // !_WIN32
关于c - 如何在 "mongoose webserver"(Linux) 上处理/杀死 cgi 脚本 (C++) 的 Zombie 或 <defunct> 进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6986543/
我最近开始研究使用 Zombie.js + Mocha + Node.js 作为旨在用于客户端(例如在浏览器中)的 JavaScript 文件的单元测试框架。 不过,阅读文档后,我开始怀疑 Zombi
在僵尸的 RSpec 测试中,我试图让这个测试通过 describe Zombie do it "starts off with two weapons" do z = Zombie.ne
我正在尝试解决以下挑战,但无济于事:僵尸的起始距离为米,移动速度为每秒 0.5 米。每一秒,你首先射击一个僵尸,然后剩下的僵尸又向前移动 0.5 米。 如果任何僵尸设法到达 0 米,你就会被吃掉。如果
目前,我正在为应用程序商店构建我的第一个应用程序,因此我已阅读 here ,应用程序应使用少于 30 MB 的 RAM(iPhone 3G、iPhone 4)。我读到,在某个时间点,iOS 将开始通过
我正在制作僵尸启示录风格的奶酪游戏,但我不知道在哪里/如何声明僵尸。我认为既然我在我的 Gamescene.sks 文件中制作了它们,每个名称都为“僵尸”,那么它们将被这样声明。我试图让僵尸(我在 .
工具 尝试 1 Darwin 14.3.0 Darwin 内核版本 14.3.0 io.js v1.8.1 zombie 版本 4.0.7 2015-04-10 尝试 2 Linux ubuntuG5
所以我遇到了zombie.js,这是一个 headless 浏览器吗? 如果是这样,它使用什么浏览器引擎? 我可以依靠它进行大量自动化测试吗?基本上,我仅限于单个服务器,因此我想尽可能多地进行浏览器测
使用browser.visit,我正在获取浏览器的页面,如文档中所示。根据浏览器API,browser.document返回主窗口的文档。但是,我不确定如何转储(显示)文档的内容。是否有类似brows
我在使用 Zombie.js 和评估将内容写入 window 变量的脚本时遇到了一些问题。这是一个例子来说明我的意思: 假设我有一个脚本 foo.js 执行以下操作: window.foo = 'fo
目前我正在尝试使用 zombie.js 为我的网站运行自动化测试。现在我正在努力使一个人注册自动化。对于注册,表单使用了 3 个不同的 div,如下所示 页面代码: ...
我开始使用 zombie js,但我有一些初学者问题: 1.) 如何测试ajax调用?例如我有 php ajax 操作 (Zend) public function ajaxSomeAction()
Question: How can I determine which one produces a "zombie process" // Case 1 while(fork()) ; ex
我在 EC2 上使用 spot 实例来使用 RabbitMQ 队列。每个作业都需要几秒钟,并且需要手动“确认”。 实例终止时会出现问题。没有时间完全关闭 AMQP 消费者,所以我剩下的 RabbitM
我正在尝试处理 Zombie.js 中的下载提示,查看 API我没有看到任何指示如何这样做的信息。 基本上,我要做的是浏览需要身份验证的网站,然后单击网站上的按钮(无 href),然后自动进行下载。下
我正在尝试在 Express 应用程序上使用 zombie.js(带有 mocha)以确保某些元素不会显示在页面上。以下是我尝试执行此操作的方法: var app = require('../app)
我正在尝试使用 zombie.js 提交表单,但 pressButton() 失败并显示“错误:没有按钮‘xxx’”,其中 xxx 是选择器。这是应用程序: var Browser = require
我想显式销毁一个对象(对其及其所有字段调用析构函数),但我可能仍然持有一些指向相关对象的指针。因此,我还不想释放内存;相反,我想留下一个标志“我是一个被摧毁的物体”。 我想到了以下方法: class
重启我们的 Jenkins 2.107.2 实例后,它会在主页的“master”部分显示许多之前完成的管道运行,并带有一个部分完成的进度条。 当查看这些运行的控制台日志时,它们是几天前完成的(早在重启
你知道如何使用 Zombie.js 按 Enter 键吗? 提前致谢。 最佳答案 目前还没有办法只使用 zombie API 来做到这一点。这是因为 .fire() 方法不允许您传递除事件名称之外的任
背景: 我们使用了很多聚合、单例和多例编排,类似于 Seroter's Round Robin此处描述的技术(BizTalk 2009)。 所有这些编排类型都有相当任意的退出或延续点(用于聚合),通常
我是一名优秀的程序员,十分优秀!