2012-04-29 229 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