2011-03-31 41 views
2

我需要重新加载鱿鱼守护进程,解决的办法是:如何重新加载系统守护进程?

system("/etc/init.d/squid reload\n"); 

但我认为必须有比使用“系统”呼叫更高效的解决方案,我应该用什么C指令?

非常感谢。

+3

@Amber:'subprocess.call()'in * C *? – thkala 2011-03-31 07:39:31

+0

这实际上是python,不是吗? – 2011-03-31 07:40:23

+0

这听起来像是一种系统管理类型的任务,最好用更高级别的“脚本”语言而不是C来完成。 – 2011-03-31 07:57:02

回答

2

如果你真的需要更快的解决方案,你可以使用fork和exec,但是由于squid init脚本必须运行,并且squid必须完成这项工作,所以对C程序的任何优化只会给你一个很小的改进。

编辑:

在另一方面(在已搜索的鱿鱼手册),一些守护程序作出反应的信号,和鱿鱼似乎这样做。

kill(process-id-of-the-squid-dameon, SIGHUP); 
+0

就是这样,现在我需要发现squid进程ID。非常感谢你。 – 2011-03-31 07:58:47

3

的绝对最快的方式有鱿鱼重新加载其配置文件将是一个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()方法,该方法是异步的,因此从应用程序的角度来看速度更快。

相关问题