2010-09-01 82 views
1

我正在做一个PHP工具供我个人使用。但是PHP非常慢,我需要做的工作需要很多时间,所以我将在C++中创建一个守护进程并将其保留在后台(它将以VPS运行)。如何开始在类Unix操作系统(如Linux)中编写守护进程?

PHP会通过一个简单的TCP套接字连接到守护进程(我会尝试设计/使用一个简单的IPC协议)以提交任务。守护进程将用一个简单的FIFO队列管理任务。 PHP将只有开始的任务,但它不会等到它结束,因为它可能需要几分钟时间(PHP会监控任务 - 但这是另一个话题)。

Web/PHP界面根本不会成为问题。但是我没有关于unix守护进程编程的经验。我在linux上用C++编写了简单的控制台程序,所以我只需要一本手册/书籍/指南和建议来开始unix守护进程的开发。

谢谢。

+0

http://www.netzmafia.de/skripten/unix/linux-daemon-howto.html – Anycorn 2010-09-01 16:51:02

+0

“非常长”是什么意思?您可能要考虑使用除C++之外的其他语言,例如Python或Perl,它们都具有可靠的工具。 – Ether 2010-09-01 16:57:46

+0

我的意思是需要很多时间。我更喜欢使用C++,因为我有经验,我不知道Python或Perl。另外我认为C++速度更快,而且处于更低的水平。 – NeDark 2010-09-01 17:28:59

回答

5

http://www.enderunix.org/docs/eng/daemon.php提供了一个相当全面但很简短的示例代码,它似乎涵盖了所有重要的部分。如果你愿意花一些钱在纸上(值得,恕我直言),“UNIX环境下的高级编程(第二版)”中有更深入的描述。

上面的链接并不涉及init脚本,但是您可以通过一些搜索来解决这个问题 - 您只需要一些启动守护程序代码的方法以及稍后发送信号的方式 - 通常,您可以编写守护进程的PID到/ var/run/XXX文件。

+2

上面的链接只有一个分支。规范方法和我认为“UNIX环境下的高级编程”的建议是,你应该分叉两次。 http://stackoverflow.com/questions/881388/what-is-the-reason-for-performing-a-double-fork-when-creating-a-daemon – JimB 2010-09-01 18:58:11