2012-04-29 145 views
2

我正在考虑为FreeBSD编写一个守护进程程序,然而,我从来没有这样做过,而且从外观上看,它非常复杂。FreeBSD的守护进程库

是否有我可以包含的任何库,然后只为我的守护进程编写特定的东西?

回答

2

对不起,发布这个答案而不是评论 - 我没有足够的声誉做后者。

你可能想看看守护进程(3),这是FreeBSD的libc中提供的一个函数。它执行诸如关闭标准文件描述符,设置事件以使SIGHUP不起作用,等等。源代码是在这里:

http://svnweb.freebsd.org/base/head/lib/libc/gen/daemon.c?view=markup

还有一个手册页。 (小心,还有一个包装程序,守护进程(1))。另外请注意,它不是可移植的(尽管它可能在libbsd中可用,我不确定)。

FreeBSD还提供了libutil(再次,我认为不是可移植的),其中还提供了用于处理PID文件的pidfile _ *()函数,我认为这对于编写守护进程非常有用。还有其他的考虑,但这可能会帮助你开始。除非你有特定的问题,否则不能多说。

+0

谢谢你的回复,这是非常有帮助的。至于更具体的事情 - 我想也能够从终端或cron发送消息,像传输守护进程(这是通过传输远程传达的,我相信)。 – Ibolit 2012-04-30 05:53:01

+0

如果您知道守护进程和客户端进程将始终运行在同一台计算机上,那么最好的方法是使用unix域套接字。这个想法是让守护进程在启动时用一些标准名称(例如$ {HOME} /。守护进程/套接字,或者可能在/ var/run中的东西)创建一个套接字,然后让客户端查找此套接字。这个东西是非常标准的:这里有一个快速教程:beej.us/guide/bgipc/output/html/multipage/unixsock.html 传输使用IP套接字,并有一些RPC库,所以它有点复杂。 syslogd可能是查找示例的好地方。 – 2012-04-30 07:54:03

+0

(可能应该提到unix域套接字是文件系统中的对象,所以它们使用的是文件名而不是URL +端口,与IP套接字一样,但它们都使用相同的接口进行操作,但套接字),bind()等) – 2012-04-30 07:56:53