Closed. This question is opinion-based。它当前不接受答案。
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
2年前关闭。
我想创建一个守护进程,该进程将在系统(Unix)重新启动时在后台自动开始执行。为了进行测试,我编写了一个shell脚本文件,并将该文件的路径放入
我搜索发现几乎所有守护进程都使用C编写。
我的问题是:为什么用C而不是Java或Shell脚本?
如果我用Java编写,那是什么问题?
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
2年前关闭。
我想创建一个守护进程,该进程将在系统(Unix)重新启动时在后台自动开始执行。为了进行测试,我编写了一个shell脚本文件,并将该文件的路径放入
/etc/rc.local
中,并且该文件成功运行。我搜索发现几乎所有守护进程都使用C编写。
我的问题是:为什么用C而不是Java或Shell脚本?
如果我用Java编写,那是什么问题?
最佳答案
这实际上取决于守护进程要实现的工作类型。
通常,守护程序提供某种服务,包括(但不限于)监视文件并在发生某些更改时执行操作(签出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守护程序运行。这些脚本甚至是在虚拟机中运行的小程序都可以执行与C守护程序相同的功能,但是性能和开销要求各不相同。
用Java编写守护程序并不一定没有错,但是与Linux本地运行的C程序相比,您可能需要为running it in a JVM分配更多的内存和CPU周期。
用您喜欢的任何一种语言编写守护程序,但是请记住,如果您决定从Java程序中召唤一个守护程序,则会有很多牺牲。考虑一下您使用Java(或其他任何语言)的原因,以及它的缺点和好处是否值得。
如果您对C不满意,我会衷心建议您尽力而为。考虑到编写OS和底层程序的流行程度,学习起来很麻烦。许多语言都是基于C语法的,因此在将来学习新语言时,掌握C技能可能会有所帮助。