簡體   English   中英

如何重新加載系統守護程序?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM