Daemon : Java based daemons or services – Apache Commons Daemon
Apache Commons Daemon ™
Last Published: 11 Dec 2025
Version: 1.5.1
ApacheCon
Apache
Commons
Commons Daemon
About
Asking Questions
Release History
Issue Tracking
Dependency Management
Javadoc
Javadoc Archive
Sources
Security
License
Code of Conduct
Procrun
Jsvc
Native binaries
FAQ
Project Documentation
Project Information
About
Summary
Team
Source Code Management
Issue Management
Mailing Lists
Maven Coordinates
Dependency Management
Dependencies
Dependency Convergence
CI Management
Distribution Management
Project Reports
Commons
License
Components
Sandbox
Dormant
General Information
Security
Volunteering
Contributing Patches
Building Components
Commons Parent POM
Commons Build Plugin
Commons Release Plugin
Site Publication
Releasing Components
Wiki
ASF
How the ASF works
Get Involved
Developer Resources
Code of Conduct
Sponsorship
Thanks
Introduction
Since 1994, the Java programming language evolved and became a
valid tool to develop reliable and performant server applications as
opposed to just applets and client applications. The major disadvantage of
the Java platform is that still today the only portable way to
start a Java application relies on a single point of entry: the
public static void
main(
String
[])
method.
Having a single-point of entry is a valid solution for client
applications, where interactively a user can command to the application
to quit (which can terminate the Virtual Machine process at calling the
System
.exit(
int
method), but in those cases where the application is not interactive
(server applications) there is currently no portable way to notify
the Virtual Machine of its imminent shutdown.
A server application written in Java might have to perform several tasks
before being able to shut down the Virtual Machine process. For example
in the case of a Servlet container, before the VM process is shut down,
sessions might need to be serialized to disk, and web applications need
to be destroyed.
One common solution to this problem is to create (for example) a
ServerSocket
and wait for a particular
message to be issued. When the message is received, all operations
required to shut down the server applications are performed and at the
end the
System
.exit
method is called
to terminate the Virtual Machine process. This method however, has
several disadvantages and risks:
In case of a system-wide shutdown, the Virtual Machine process may be
shut down directly by the operating system without notifying the running
server application.
If an attacker finds out the shutdown message to send to the server
and discovers a way to send this message, he can easily interrupt
the server's operation, bypassing all the security restrictions
implemented in the operating system.
Most multi-user operating systems already have a way in which server
applications are started and stopped. Under Unix based operating systems
non-interactive server applications are called
daemons
and are
controlled by the operating system with a set of specified
signals
. Under Windows such programs are called
services
and are controlled by appropriate calls to specific functions defined in
the application binary, but although the ways of dealing with the problem
are different, in both cases the operating system can notify a server
application of its imminent shutdown, and the application has the
ability to perform certain tasks before its process of execution is
destroyed.
Structure
Daemon is made of 2 parts. One written in C that makes the interface to
the operating system and the other in Java that provides the
Daemon API.
Platforms
Both Win32 and UNIX like platforms are supported.
For Win32 platforms use
procrun
For UNIX like platforms use
jsvc
Initial Source of the Package
The original Java classes came from the Jakarta Tomcat 4.0 project.
The package name for the Daemon component is
org.apache.commons.daemon
Copyright © 2002-2025
The Apache Software Foundation
Apache Commons, Apache Commons Daemon, Apache, the Apache logo, and the Apache Commons project logos are trademarks of The Apache Software Foundation.
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
US