keter-1.3.0: Web application deployment manager, focusing on Haskell web frameworks

Safe HaskellNone

Data.Conduit.Process.Unix

Contents

Synopsis

Process tracking

Ensure that child processes are killed, regardless of how the parent process exits.

The technique used here is:

  • Create a pipe.
  • Fork a new child process that listens on the pipe.
  • In the current process, send updates about processes that should be auto-killed.
  • When the parent process dies, listening on the pipe in the child process will get an EOF.
  • When the child process receives that EOF, it kills all processes it was told to auto-kill.

This code was originally written for Keter, but was moved to unix-process conduit in the 0.2.1 release.

Types

data ProcessTracker Source

Represents the child process which handles process cleanup.

Since 0.2.1

Functions

initProcessTracker :: IO ProcessTrackerSource

Fork off the child cleanup process.

This will ideally only be run once for your entire application.

Since 0.2.1

Monitored process

data MonitoredProcess Source

Abstract type containing information on a process which will be restarted.

monitorProcessSource

Arguments

:: (ByteString -> IO ())

log

-> ProcessTracker 
-> Maybe ByteString

setuid

-> ByteString

executable

-> ByteString

working directory

-> [ByteString]

command line parameter

-> [(ByteString, ByteString)]

environment

-> (ByteString -> IO ()) 
-> (ExitCode -> IO Bool)

should we restart?

-> IO MonitoredProcess 

Run the given command, restarting if the process dies.

terminateMonitoredProcess :: MonitoredProcess -> IO ()Source

Terminate the process and prevent it from being restarted.