[英]How can I reload a system daemon?
我需要重新加載Squid守護程序,解決方案是:
system("/etc/init.d/squid reload\n");
但是我認為必須有比使用“系統”調用更有效的解決方案,我應該使用哪種C指令?
非常感謝你。
Squid重新加載其配置文件的絕對最快的方法是使用kill()
將SIGHUP信號發送到守護程序。 這是squid -k reconfigure
工作,而這又是/etc/init.d/squid reload
最有可能做的事情。
這種方法的問題在於,您必須以某種方式在C代碼中發現squid守護程序的進程ID。 PID通常存儲在/var/run
(在我的情況下為/var/run/squid.pid
)下的文本文件中,您可以讀取該文件-從而省去了查看過程表的麻煩,但是仍然有些混亂。
考慮到/etc/init.d/squid
也可能正在執行自定義操作,並且您不必每秒左右重新加載守護程序,我想您應該使用當前的解決方案。 如果您不關心腳本的返回狀態,也可以使用公共的fork()
和exec()
方法,該方法是異步的,因此從應用程序的角度來看更快。
如果確實需要更快的解決方案,則可以使用fork和exec,但是由於必須運行squid初始化腳本,並且Squid必須完成工作,因此C程序的任何優化都只能帶來很小的改善。
編輯:
另一方面(在查看了Squid手冊之后),某些守護程序會對信號做出反應,而Squid似乎也這樣做。 例如,如果您向其發送HUP信號,它將重新讀取其配置文件:
kill(process-id-of-the-squid-dameon, SIGHUP);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.