我想创建一个守护进程,该进程将在系统(Unix)重新启动时在后台自动开始执行。为了进行测试,我编写了一个shell脚本文件,并将该文件的路径放入/etc/rc.local
中,并且该文件可以成功运行。
我搜索发现几乎所有的守护进程都用C编写。 我的问题是:为什么用C而不是Java或Shell脚本? 如果我用Java编写,怎么了?
答案 0 :(得分:1)
这实际上取决于守护进程要实现的工作类型。
通常,守护程序提供某种服务,包括(但不限于)监视文件并在发生某些更改时执行操作(签出inotify,一个核心Linux C库),监听连接和/或传输信息。
C是Linux的通用语言,因为它快速,灵活并且是very close to machine-level code。 GNU Compiler Collection (gcc)是Linux的重要组成部分,GNU C Library (glibc)中包含各种有用的C库。这个glibc实际上是每个Linux发行版的一部分。
您可以轻松地使用systemd来保持Python,PHP甚至Java守护程序的运行。这些脚本甚至是在虚拟机中运行的applet都可以执行与C守护程序相同的功能,但是性能和开销要求各不相同。
用Java编写守护程序并不一定没有错,但是与Linux本机运行的C程序相比,您可能需要为running it in a JVM分配更多的内存和CPU周期。
用您喜欢的任何一种语言编写守护程序,但是请记住,如果您决定从Java程序中召唤一个守护程序,则有很多牺牲。仔细考虑一下您使用Java(或其他任何语言)的原因,以及它的缺点和好处是否值得。
如果您对C不满意,我衷心建议您尽力而为。考虑到编写OS和底层程序的流行程度,值得学习。许多语言都是宽松地基于C语法的,因此在将来学习新语言时,掌握C技能可能会有所帮助。