我需要重新加载鱿鱼守护进程,解决的办法是:如何重新加载系统守护进程?
system("/etc/init.d/squid reload\n");
但我认为必须有比使用“系统”呼叫更高效的解决方案,我应该用什么C指令?
非常感谢。
我需要重新加载鱿鱼守护进程,解决的办法是:如何重新加载系统守护进程?
system("/etc/init.d/squid reload\n");
但我认为必须有比使用“系统”呼叫更高效的解决方案,我应该用什么C指令?
非常感谢。
如果你真的需要更快的解决方案,你可以使用fork和exec,但是由于squid init脚本必须运行,并且squid必须完成这项工作,所以对C程序的任何优化只会给你一个很小的改进。
编辑:
在另一方面(在已搜索的鱿鱼手册),一些守护程序作出反应的信号,和鱿鱼似乎这样做。
kill(process-id-of-the-squid-dameon, SIGHUP);
就是这样,现在我需要发现squid进程ID。非常感谢你。 – 2011-03-31 07:58:47
的绝对最快的方式有鱿鱼重新加载其配置文件将是一个SIGHUP signal发送到使用kill()
守护进程:例如,如果你发送一个HUP信号,它重新读取它的配置文件。这就是squid -k reconfigure
所做的,而这又是/etc/init.d/squid reload
最可能做的。
这种方法的问题是你必须以某种方式发现C代码中的squid守护进程的进程ID。 PID通常存储在/var/run
(我的案例中为/var/run/squid.pid
)的某个文本文件中,您可以进行读入操作,这样可以节省查看流程表的麻烦,但它仍然有点混乱。
考虑到/etc/init.d/squid
也可能正在执行自定义操作,并且您没有义务每隔一秒左右重新加载守护进程,所以我会说您应该使用当前的解决方案。如果您不关心脚本的返回状态,则还可以使用常见的fork()
和exec()
方法,该方法是异步的,因此从应用程序的角度来看速度更快。
@Amber:'subprocess.call()'in * C *? – thkala 2011-03-31 07:39:31
这实际上是python,不是吗? – 2011-03-31 07:40:23
这听起来像是一种系统管理类型的任务,最好用更高级别的“脚本”语言而不是C来完成。 – 2011-03-31 07:57:02