Class SpawnService

java.lang.Object
com.kosdev.kos.core.service.spawn.SpawnService

public final class SpawnService extends Object
Service that is used to start/stop native programs on this node or other nodes using a spawn session. All programs started by this service are monitored and will be restarted using a backoff algorithm if they crash. This is the preferred way to start long-running programs on the current node or nodes that don't run Java.
Since:
1
Version:
1
  • Method Details

    • addProcess

      public void addProcess(SpawnProcess process, NodeId nodeId)
      Add a process to the spawn list of the specified node. If there is already an iface to the node then the process will be started immediately, otherwise it will start once the iface is established. If the daemon flag of the process is true, this will be run as a daemon. If the flag is false, the process will be run once.

      A SpawnProcess object can only be used once as it will be updated with lifecycle and end state data. Trying to add the same object multiple times will throw an exception.

      As the process is queued until the native spawner becomes available, this is a convenient way of ensuring a native program is run as soon as possible without needing to monitor the connectivity state of native spawner.

      While daemons can be started with this api, consider using addDaemon() instead as this will also ensure that the daemon flag is set on the process.

      Parameters:
      process - the process that should be run
      nodeId - the node to run the process on
      Since:
      1
    • addDaemon

      public void addDaemon(SpawnProcess process, NodeId nodeId)
      Add a daemon process to the specified node. Daemons are processes that are long running and should be restarted if they crash. This method will set the daemon flag of the specified process, ensuring that all processes started with this method are in fact daemons.

      A SpawnProcess object can only be used once as it will be updated with lifecycle and end state data. Trying to add the same object multiple times will throw an exception. In the case of a daemon, the pid, end state and lifecycle events will change as the process is restarted.

      Parameters:
      process - the process that should be run as a daemon
      nodeId - the node to run the process on
      Since:
      10
    • addProcess

      public void addProcess(SpawnProcess process)
      Add a process to the spawn list of the local node. If there is already an iface to the node then the process will be started immediately, otherwise it will start once the iface is established. If the daemon flag of the process is true, this will be run as a daemon. If the flag is false, the process will be run once.

      A SpawnProcess object can only be used once as it will be updated with lifecycle and end state data. Trying to add the same object multiple times will throw an exception.

      As the process is queued until the native spawner becomes available, this is a convenient way of ensuring a native program is run as soon as possible without needing to monitor the connectivity state of native spawner.

      While daemons can be started with this api, consider using addDaemon() instead as this will also ensure that the daemon flag is set on the process.

      Parameters:
      process - the process that should be run
      Since:
      1
    • addDaemon

      public void addDaemon(SpawnProcess process)
      Add a daemon process to the local node. Daemons are processes that are long running and should be restarted if they crash. This method will set the daemon flag of the specified process, ensuring that all processes started with this method are in fact daemons.

      A SpawnProcess object can only be used once as it will be updated with lifecycle and end state data. Trying to add the same object multiple times will throw an exception. In the case of a daemon, the pid, end state and lifecycle events will change as the process is restarted.

      Parameters:
      process - the process that should be run as a daemon
      Since:
      10
    • removeProcess

      public void removeProcess(SpawnProcess process)
      Remove a process from the spawn list. If it is running, it will be killed. This is typically used to remove daemon processes that are no longer needed. If the process is not a daemon process, it will still be killed if currently running.

      This is equivalent to calling SpawnProcess.remove() .

      Parameters:
      process - the process to remove
      Since:
      1
    • restartDaemon

      public void restartDaemon(SpawnProcess process)
      Restart the specified daemon process. This kills the process and allows the service to restart it. This can be used to reset a daemon that is not performing correctly.

      This equivalent to calling SpawnProcess.restart() .

      Parameters:
      process - the process to restart
      Since:
      1
    • setPriority

      public void setPriority(SpawnProcess process, int priority)
      Set the priority of the specified process.

      This is equivalent to calling SpawnProcess.setPriority() .

      Parameters:
      process - the process to change the priority of
      priority - the new priority -20..19 (unix semantics)
      Since:
      1
    • getDaemons

      public List<SpawnProcess> getDaemons(NodeId nodeId)
      Return a list of daemon processes that are currently expected to be running on the specified node.
      Parameters:
      nodeId - id of the node to return the list from
      Returns:
      list of processes
      Since:
      10
    • getDaemons

      public List<SpawnProcess> getDaemons()
      Return a list of daemon processes that are currently expected to be running on the local node.
      Returns:
      list of processes
      Since:
      10