-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Process libraries
--
-- This package contains libraries for dealing with system processes.
--
-- The typed-process package is a more recent take on a process API,
-- which uses this package internally. It features better binary support,
-- easier concurrency, and a more composable API. You can read more about
-- it at https://github.com/fpco/typed-process/#readme.
@package process
@version 1.6.8.2
-- | Note: This module exports internal implementation details that
-- may change anytime. If you want a more stable API, use
-- System.Process instead.
module System.Process.Internals
data ProcessHandle
ProcessHandle :: !MVar ProcessHandle__ -> !Bool -> !MVar () -> ProcessHandle
[phandle] :: ProcessHandle -> !MVar ProcessHandle__
[mb_delegate_ctlc] :: ProcessHandle -> !Bool
[waitpidLock] :: ProcessHandle -> !MVar ()
-- | A handle to a process, which can be used to wait for termination of
-- the process using waitForProcess.
--
-- None of the process-creation functions in this library wait for
-- termination: they all return a ProcessHandle which may be used
-- to wait for the process later.
--
-- On Windows a second wait method can be used to block for event
-- completion. This requires two handles. A process job handle and a
-- events handle to monitor.
data ProcessHandle__
OpenHandle :: PHANDLE -> ProcessHandle__
-- | the process
[phdlProcessHandle] :: ProcessHandle__ -> PHANDLE
OpenExtHandle :: PHANDLE -> PHANDLE -> ProcessHandle__
-- | the process
[phdlProcessHandle] :: ProcessHandle__ -> PHANDLE
-- | the job containing the process and its subprocesses
[phdlJobHandle] :: ProcessHandle__ -> PHANDLE
ClosedHandle :: ExitCode -> ProcessHandle__
type PHANDLE = CPid
closePHANDLE :: PHANDLE -> IO ()
mkProcessHandle :: PHANDLE -> Bool -> IO ProcessHandle
data CGid
type GroupID = CGid
type UserID = CUid
modifyProcessHandle :: ProcessHandle -> (ProcessHandle__ -> IO (ProcessHandle__, a)) -> IO a
withProcessHandle :: ProcessHandle -> (ProcessHandle__ -> IO a) -> IO a
data CreateProcess
CreateProcess :: CmdSpec -> Maybe FilePath -> Maybe [(String, String)] -> StdStream -> StdStream -> StdStream -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Maybe GroupID -> Maybe UserID -> Bool -> CreateProcess
-- | Executable & arguments, or shell command. If cwd is
-- Nothing, relative paths are resolved with respect to the
-- current working directory. If cwd is provided, it is
-- implementation-dependent whether relative paths are resolved with
-- respect to cwd or the current working directory, so absolute
-- paths should be used to ensure portability.
[cmdspec] :: CreateProcess -> CmdSpec
-- | Optional path to the working directory for the new process
[cwd] :: CreateProcess -> Maybe FilePath
-- | Optional environment (otherwise inherit from the current process)
[env] :: CreateProcess -> Maybe [(String, String)]
-- | How to determine stdin
[std_in] :: CreateProcess -> StdStream
-- | How to determine stdout
[std_out] :: CreateProcess -> StdStream
-- | How to determine stderr
[std_err] :: CreateProcess -> StdStream
-- | Close all file descriptors except stdin, stdout and stderr in the new
-- process (on Windows, only works if std_in, std_out, and std_err are
-- all Inherit). This implementation will call close an every fd from 3
-- to the maximum of open files, which can be slow for high maximum of
-- open files.
[close_fds] :: CreateProcess -> Bool
-- | Create a new process group
[create_group] :: CreateProcess -> Bool
-- | Delegate control-C handling. Use this for interactive console
-- processes to let them handle control-C themselves (see below for
-- details).
--
-- On Windows this has no effect.
[delegate_ctlc] :: CreateProcess -> Bool
-- | Use the windows DETACHED_PROCESS flag when creating the process; does
-- nothing on other platforms.
[detach_console] :: CreateProcess -> Bool
-- | Use the windows CREATE_NEW_CONSOLE flag when creating the process;
-- does nothing on other platforms.
--
-- Default: False
[create_new_console] :: CreateProcess -> Bool
-- | Use posix setsid to start the new process in a new session; does
-- nothing on other platforms.
[new_session] :: CreateProcess -> Bool
-- | Use posix setgid to set child process's group id; does nothing on
-- other platforms.
--
-- Default: Nothing
[child_group] :: CreateProcess -> Maybe GroupID
-- | Use posix setuid to set child process's user id; does nothing on other
-- platforms.
--
-- Default: Nothing
[child_user] :: CreateProcess -> Maybe UserID
-- | On Windows systems this flag indicates that we should wait for the
-- entire process tree to finish before unblocking. On POSIX systems this
-- flag is ignored. See $exec-on-windows for details.
--
-- Default: False
[use_process_jobs] :: CreateProcess -> Bool
data CmdSpec
-- | A command line to execute using the shell
ShellCommand :: String -> CmdSpec
-- | The name of an executable with a list of arguments
--
-- The FilePath argument names the executable, and is interpreted
-- according to the platform's standard policy for searching for
-- executables. Specifically:
--
--
-- - on Unix systems the execvp(3) semantics is used, where if
-- the executable filename does not contain a slash (/) then the
-- PATH environment variable is searched for the
-- executable.
-- - on Windows systems the Win32 CreateProcess semantics is
-- used. Briefly: if the filename does not contain a path, then the
-- directory containing the parent executable is searched, followed by
-- the current directory, then some standard locations, and finally the
-- current PATH. An .exe extension is added if the
-- filename does not already have an extension. For full details see the
-- documentation for the Windows SearchPath API.
--
RawCommand :: FilePath -> [String] -> CmdSpec
data StdStream
-- | Inherit Handle from parent
Inherit :: StdStream
-- | Use the supplied Handle
UseHandle :: Handle -> StdStream
-- | Create a new pipe. The returned Handle will use the default
-- encoding and newline translation mode (just like Handles
-- created by openFile).
CreatePipe :: StdStream
-- | Close the stream's file descriptor without passing a Handle. On POSIX
-- systems this may lead to strange behavior in the child process because
-- attempting to read or write after the file has been closed throws an
-- error. This should only be used with child processes that don't use
-- the file descriptor at all. If you wish to ignore the child process's
-- output you should either create a pipe and drain it manually or pass a
-- Handle that writes to /dev/null.
NoStream :: StdStream
-- | contains the handles returned by a call to createProcess_Internal
data ProcRetHandles
ProcRetHandles :: Maybe Handle -> Maybe Handle -> Maybe Handle -> ProcessHandle -> ProcRetHandles
[hStdInput] :: ProcRetHandles -> Maybe Handle
[hStdOutput] :: ProcRetHandles -> Maybe Handle
[hStdError] :: ProcRetHandles -> Maybe Handle
[procHandle] :: ProcRetHandles -> ProcessHandle
-- | This function is almost identical to createProcess. The only
-- differences are:
--
--
-- - Handles provided via UseHandle are not closed
-- automatically.
-- - This function takes an extra String argument to be used
-- in creating error messages.
-- - use_process_jobs can be set in CreateProcess since 1.5.0.0
-- in order to create an I/O completion port to monitor a process tree's
-- progress on Windows.
--
--
-- The function also returns two new handles: * an I/O Completion Port
-- handle on which events will be signaled. * a Job handle which can be
-- used to kill all running processes.
--
-- On POSIX platforms these two new handles will always be Nothing
--
-- This function has been available from the
-- System.Process.Internals module for some time, and is part of
-- the System.Process module since version 1.2.1.0.
createProcess_ :: String -> CreateProcess -> IO (Maybe Handle, Maybe Handle, Maybe Handle, ProcessHandle)
-- | Deprecated: Please do not use this anymore, use the ordinary
-- createProcess. If you need the SIGINT handling, use
-- delegate_ctlc = True (runGenProcess_ is now just an imperfectly
-- emulated stub that probably duplicates or overrides your own signal
-- handling).
runGenProcess_ :: String -> CreateProcess -> Maybe CLong -> Maybe CLong -> IO (Maybe Handle, Maybe Handle, Maybe Handle, ProcessHandle)
-- | Turn an existing file descriptor into a Handle. This is used by
-- various external libraries to make Handles.
--
-- Makes a binary Handle. This is for historical reasons; it should
-- probably be a text Handle with the default encoding and newline
-- translation instead.
fdToHandle :: FD -> IO Handle
startDelegateControlC :: IO ()
endDelegateControlC :: ExitCode -> IO ()
stopDelegateControlC :: IO ()
unwrapHandles :: ProcRetHandles -> (Maybe Handle, Maybe Handle, Maybe Handle, ProcessHandle)
pPrPr_disableITimers :: IO ()
c_execvpe :: CString -> Ptr CString -> Ptr CString -> IO CInt
ignoreSignal :: CLong
defaultSignal :: CLong
-- | runInteractiveProcess blocks signals around the fork(). Since
-- blocking/unblocking of signals is a global state operation, we need to
-- ensure mutual exclusion of calls to runInteractiveProcess.
-- This lock is exported so that other libraries which also need to
-- fork() (and also need to make the same global state changes) can
-- protect their changes with the same lock. See
-- https://github.com/haskell/process/pull/154.
runInteractiveProcess_lock :: MVar ()
withFilePathException :: FilePath -> IO a -> IO a
withCEnvironment :: [(String, String)] -> (Ptr CString -> IO a) -> IO a
translate :: String -> String
-- | Create a pipe for interprocess communication and return a
-- (readEnd, writeEnd) Handle pair.
createPipe :: IO (Handle, Handle)
-- | Create a pipe for interprocess communication and return a
-- (readEnd, writeEnd) FD pair.
createPipeFd :: IO (FD, FD)
-- | Sends an interrupt signal to the process group of the given process.
--
-- On Unix systems, it sends the group the SIGINT signal.
--
-- On Windows systems, it generates a CTRL_BREAK_EVENT and will only work
-- for processes created using createProcess and setting the
-- create_group flag
interruptProcessGroupOf :: ProcessHandle -> IO ()
-- | Operations for creating and interacting with sub-processes.
module System.Process
-- | This is the most general way to spawn an external process. The process
-- can be a command line to be executed by a shell or a raw command with
-- a list of arguments. The stdin, stdout, and stderr streams of the new
-- process may individually be attached to new pipes, to existing
-- Handles, or just inherited from the parent (the default.)
--
-- The details of how to create the process are passed in the
-- CreateProcess record. To make it easier to construct a
-- CreateProcess, the functions proc and shell are
-- supplied that fill in the fields with default values which can be
-- overriden as needed.
--
-- createProcess returns (mb_stdin_hdl,
-- mb_stdout_hdl, mb_stderr_hdl, ph), where
--
--
-- - if std_in == CreatePipe, then
-- mb_stdin_hdl will be Just h, where
-- h is the write end of the pipe connected to the child
-- process's stdin.
-- - otherwise, mb_stdin_hdl == Nothing
--
--
-- Similarly for mb_stdout_hdl and
-- mb_stderr_hdl.
--
-- For example, to execute a simple ls command:
--
--
-- r <- createProcess (proc "ls" [])
--
--
-- To create a pipe from which to read the output of ls:
--
--
-- (_, Just hout, _, _) <-
-- createProcess (proc "ls" []){ std_out = CreatePipe }
--
--
-- To also set the directory in which to run ls:
--
--
-- (_, Just hout, _, _) <-
-- createProcess (proc "ls" []){ cwd = Just "/home/bob",
-- std_out = CreatePipe }
--
--
-- Note that Handles provided for std_in,
-- std_out, or std_err via the UseHandle
-- constructor will be closed by calling this function. This is not
-- always the desired behavior. In cases where you would like to leave
-- the Handle open after spawning the child process, please use
-- createProcess_ instead. All created Handles are
-- initially in text mode; if you need them to be in binary mode then use
-- hSetBinaryMode.
createProcess :: CreateProcess -> IO (Maybe Handle, Maybe Handle, Maybe Handle, ProcessHandle)
-- | This function is almost identical to createProcess. The only
-- differences are:
--
--
-- - Handles provided via UseHandle are not closed
-- automatically.
-- - This function takes an extra String argument to be used
-- in creating error messages.
-- - use_process_jobs can be set in CreateProcess since 1.5.0.0
-- in order to create an I/O completion port to monitor a process tree's
-- progress on Windows.
--
--
-- The function also returns two new handles: * an I/O Completion Port
-- handle on which events will be signaled. * a Job handle which can be
-- used to kill all running processes.
--
-- On POSIX platforms these two new handles will always be Nothing
--
-- This function has been available from the
-- System.Process.Internals module for some time, and is part of
-- the System.Process module since version 1.2.1.0.
createProcess_ :: String -> CreateProcess -> IO (Maybe Handle, Maybe Handle, Maybe Handle, ProcessHandle)
-- | Construct a CreateProcess record for passing to
-- createProcess, representing a command to be passed to the
-- shell.
shell :: String -> CreateProcess
-- | Construct a CreateProcess record for passing to
-- createProcess, representing a raw command with arguments.
--
-- See RawCommand for precise semantics of the specified
-- FilePath.
proc :: FilePath -> [String] -> CreateProcess
data CreateProcess
CreateProcess :: CmdSpec -> Maybe FilePath -> Maybe [(String, String)] -> StdStream -> StdStream -> StdStream -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Maybe GroupID -> Maybe UserID -> Bool -> CreateProcess
-- | Executable & arguments, or shell command. If cwd is
-- Nothing, relative paths are resolved with respect to the
-- current working directory. If cwd is provided, it is
-- implementation-dependent whether relative paths are resolved with
-- respect to cwd or the current working directory, so absolute
-- paths should be used to ensure portability.
[cmdspec] :: CreateProcess -> CmdSpec
-- | Optional path to the working directory for the new process
[cwd] :: CreateProcess -> Maybe FilePath
-- | Optional environment (otherwise inherit from the current process)
[env] :: CreateProcess -> Maybe [(String, String)]
-- | How to determine stdin
[std_in] :: CreateProcess -> StdStream
-- | How to determine stdout
[std_out] :: CreateProcess -> StdStream
-- | How to determine stderr
[std_err] :: CreateProcess -> StdStream
-- | Close all file descriptors except stdin, stdout and stderr in the new
-- process (on Windows, only works if std_in, std_out, and std_err are
-- all Inherit). This implementation will call close an every fd from 3
-- to the maximum of open files, which can be slow for high maximum of
-- open files.
[close_fds] :: CreateProcess -> Bool
-- | Create a new process group
[create_group] :: CreateProcess -> Bool
-- | Delegate control-C handling. Use this for interactive console
-- processes to let them handle control-C themselves (see below for
-- details).
--
-- On Windows this has no effect.
[delegate_ctlc] :: CreateProcess -> Bool
-- | Use the windows DETACHED_PROCESS flag when creating the process; does
-- nothing on other platforms.
[detach_console] :: CreateProcess -> Bool
-- | Use the windows CREATE_NEW_CONSOLE flag when creating the process;
-- does nothing on other platforms.
--
-- Default: False
[create_new_console] :: CreateProcess -> Bool
-- | Use posix setsid to start the new process in a new session; does
-- nothing on other platforms.
[new_session] :: CreateProcess -> Bool
-- | Use posix setgid to set child process's group id; does nothing on
-- other platforms.
--
-- Default: Nothing
[child_group] :: CreateProcess -> Maybe GroupID
-- | Use posix setuid to set child process's user id; does nothing on other
-- platforms.
--
-- Default: Nothing
[child_user] :: CreateProcess -> Maybe UserID
-- | On Windows systems this flag indicates that we should wait for the
-- entire process tree to finish before unblocking. On POSIX systems this
-- flag is ignored. See $exec-on-windows for details.
--
-- Default: False
[use_process_jobs] :: CreateProcess -> Bool
data CmdSpec
-- | A command line to execute using the shell
ShellCommand :: String -> CmdSpec
-- | The name of an executable with a list of arguments
--
-- The FilePath argument names the executable, and is interpreted
-- according to the platform's standard policy for searching for
-- executables. Specifically:
--
--
-- - on Unix systems the execvp(3) semantics is used, where if
-- the executable filename does not contain a slash (/) then the
-- PATH environment variable is searched for the
-- executable.
-- - on Windows systems the Win32 CreateProcess semantics is
-- used. Briefly: if the filename does not contain a path, then the
-- directory containing the parent executable is searched, followed by
-- the current directory, then some standard locations, and finally the
-- current PATH. An .exe extension is added if the
-- filename does not already have an extension. For full details see the
-- documentation for the Windows SearchPath API.
--
RawCommand :: FilePath -> [String] -> CmdSpec
data StdStream
-- | Inherit Handle from parent
Inherit :: StdStream
-- | Use the supplied Handle
UseHandle :: Handle -> StdStream
-- | Create a new pipe. The returned Handle will use the default
-- encoding and newline translation mode (just like Handles
-- created by openFile).
CreatePipe :: StdStream
-- | Close the stream's file descriptor without passing a Handle. On POSIX
-- systems this may lead to strange behavior in the child process because
-- attempting to read or write after the file has been closed throws an
-- error. This should only be used with child processes that don't use
-- the file descriptor at all. If you wish to ignore the child process's
-- output you should either create a pipe and drain it manually or pass a
-- Handle that writes to /dev/null.
NoStream :: StdStream
data ProcessHandle
-- | Creates a new process to run the specified command with the given
-- arguments, and wait for it to finish. If the command returns a
-- non-zero exit code, an exception is raised.
--
-- If an asynchronous exception is thrown to the thread executing
-- callProcess, the forked process will be terminated and
-- callProcess will wait (block) until the process has been
-- terminated.
callProcess :: FilePath -> [String] -> IO ()
-- | Creates a new process to run the specified shell command. If the
-- command returns a non-zero exit code, an exception is raised.
--
-- If an asynchronous exception is thrown to the thread executing
-- callCommand, the forked process will be terminated and
-- callCommand will wait (block) until the process has been
-- terminated.
callCommand :: String -> IO ()
-- | Creates a new process to run the specified raw command with the given
-- arguments. It does not wait for the program to finish, but returns the
-- ProcessHandle.
spawnProcess :: FilePath -> [String] -> IO ProcessHandle
-- | Creates a new process to run the specified shell command. It does not
-- wait for the program to finish, but returns the ProcessHandle.
spawnCommand :: String -> IO ProcessHandle
-- | readCreateProcess works exactly like readProcess
-- except that it lets you pass CreateProcess giving better
-- flexibility.
--
--
-- > readCreateProcess ((shell "pwd") { cwd = Just "/etc/" }) ""
-- "/etc\n"
--
--
-- Note that Handles provided for std_in or
-- std_out via the CreateProcess record will be ignored.
readCreateProcess :: CreateProcess -> String -> IO String
-- | readProcess forks an external process, reads its standard
-- output strictly, blocking until the process terminates, and returns
-- the output string. The external process inherits the standard error.
--
-- If an asynchronous exception is thrown to the thread executing
-- readProcess, the forked process will be terminated and
-- readProcess will wait (block) until the process has been
-- terminated.
--
-- Output is returned strictly, so this is not suitable for launching
-- processes that require interaction over the standard file streams.
--
-- This function throws an IOError if the process ExitCode
-- is anything other than ExitSuccess. If instead you want to get
-- the ExitCode then use readProcessWithExitCode.
--
-- Users of this function should compile with -threaded if they
-- want other Haskell threads to keep running while waiting on the result
-- of readProcess.
--
--
-- > readProcess "date" [] []
-- "Thu Feb 7 10:03:39 PST 2008\n"
--
--
-- The arguments are:
--
--
-- - The command to run, which must be in the $PATH, or an absolute or
-- relative path
-- - A list of separate command line arguments to the program
-- - A string to pass on standard input to the forked process.
--
readProcess :: FilePath -> [String] -> String -> IO String
-- | readCreateProcessWithExitCode works exactly like
-- readProcessWithExitCode except that it lets you pass
-- CreateProcess giving better flexibility.
--
-- Note that Handles provided for std_in,
-- std_out, or std_err via the CreateProcess record
-- will be ignored.
readCreateProcessWithExitCode :: CreateProcess -> String -> IO (ExitCode, String, String)
-- | readProcessWithExitCode is like readProcess but with
-- two differences:
--
--
-- - it returns the ExitCode of the process, and does not throw
-- any exception if the code is not ExitSuccess.
-- - it reads and returns the output from process' standard error
-- handle, rather than the process inheriting the standard error
-- handle.
--
--
-- On Unix systems, see waitForProcess for the meaning of exit
-- codes when the process died as the result of a signal.
readProcessWithExitCode :: FilePath -> [String] -> String -> IO (ExitCode, String, String)
-- | A bracket-style resource handler for createProcess.
--
-- Does automatic cleanup when the action finishes. If there is an
-- exception in the body then it ensures that the process gets terminated
-- and any CreatePipe Handles are closed. In particular
-- this means that if the Haskell thread is killed (e.g.
-- killThread), that the external process is also terminated.
--
-- e.g.
--
--
-- withCreateProcess (proc cmd args) { ... } $ \stdin stdout stderr ph -> do
-- ...
--
withCreateProcess :: CreateProcess -> (Maybe Handle -> Maybe Handle -> Maybe Handle -> ProcessHandle -> IO a) -> IO a
-- | Cleans up the process.
--
-- This function is meant to be invoked from any application level
-- cleanup handler. It terminates the process, and closes any
-- CreatePipe handles.
cleanupProcess :: (Maybe Handle, Maybe Handle, Maybe Handle, ProcessHandle) -> IO ()
-- | Given a program p and arguments args,
-- showCommandForUser p args returns a string
-- suitable for pasting into /bin/sh (on Unix systems) or
-- CMD.EXE (on Windows).
showCommandForUser :: FilePath -> [String] -> String
-- | The platform specific type for a process identifier.
--
-- This is always an integral type. Width and signedness are platform
-- specific.
type Pid = CPid
-- | Returns the PID (process ID) of a subprocess.
--
-- Nothing is returned if the handle was already closed. Otherwise
-- a PID is returned that remains valid as long as the handle is open.
-- The operating system may reuse the PID as soon as the last handle to
-- the process is closed.
getPid :: ProcessHandle -> IO (Maybe Pid)
-- | Waits for the specified process to terminate, and returns its exit
-- code.
--
-- GHC Note: in order to call waitForProcess without blocking
-- all the other threads in the system, you must compile the program with
-- -threaded.
--
-- (Since: 1.2.0.0) On Unix systems, a negative value
-- ExitFailure -signum indicates that the child
-- was terminated by signal signum. The signal numbers
-- are platform-specific, so to test for a specific signal use the
-- constants provided by System.Posix.Signals in the unix
-- package. Note: core dumps are not reported, use
-- System.Posix.Process if you need this detail.
waitForProcess :: ProcessHandle -> IO ExitCode
-- | This is a non-blocking version of waitForProcess. If the
-- process is still running, Nothing is returned. If the process
-- has exited, then Just e is returned where e
-- is the exit code of the process.
--
-- On Unix systems, see waitForProcess for the meaning of exit
-- codes when the process died as the result of a signal.
getProcessExitCode :: ProcessHandle -> IO (Maybe ExitCode)
-- | Attempts to terminate the specified process. This function should not
-- be used under normal circumstances - no guarantees are given regarding
-- how cleanly the process is terminated. To check whether the process
-- has indeed terminated, use getProcessExitCode.
--
-- On Unix systems, terminateProcess sends the process the SIGTERM
-- signal. On Windows systems, if use_process_jobs is True
-- then the Win32 TerminateJobObject function is called to kill
-- all processes associated with the job and passing the exit code of 1
-- to each of them. Otherwise if use_process_jobs is False
-- then the Win32 TerminateProcess function is called, passing
-- an exit code of 1.
--
-- Note: on Windows, if the process was a shell command created by
-- createProcess with shell, or created by
-- runCommand or runInteractiveCommand, then
-- terminateProcess will only terminate the shell, not the command
-- itself. On Unix systems, both processes are in a process group and
-- will be terminated together.
terminateProcess :: ProcessHandle -> IO ()
-- | Sends an interrupt signal to the process group of the given process.
--
-- On Unix systems, it sends the group the SIGINT signal.
--
-- On Windows systems, it generates a CTRL_BREAK_EVENT and will only work
-- for processes created using createProcess and setting the
-- create_group flag
interruptProcessGroupOf :: ProcessHandle -> IO ()
-- | Create a pipe for interprocess communication and return a
-- (readEnd, writeEnd) Handle pair.
createPipe :: IO (Handle, Handle)
-- | Create a pipe for interprocess communication and return a
-- (readEnd, writeEnd) FD pair.
createPipeFd :: IO (FD, FD)
-- | Runs a raw command, optionally specifying Handles from which to
-- take the stdin, stdout and stderr channels
-- for the new process (otherwise these handles are inherited from the
-- current process).
--
-- Any Handles passed to runProcess are placed immediately
-- in the closed state.
--
-- Note: consider using the more general createProcess instead of
-- runProcess.
runProcess :: FilePath -> [String] -> Maybe FilePath -> Maybe [(String, String)] -> Maybe Handle -> Maybe Handle -> Maybe Handle -> IO ProcessHandle
-- | Runs a command using the shell.
runCommand :: String -> IO ProcessHandle
-- | Runs a raw command, and returns Handles that may be used to
-- communicate with the process via its stdin, stdout
-- and stderr respectively.
--
-- For example, to start a process and feed a string to its stdin:
--
--
-- (inp,out,err,pid) <- runInteractiveProcess "..."
-- forkIO (hPutStr inp str)
--
runInteractiveProcess :: FilePath -> [String] -> Maybe FilePath -> Maybe [(String, String)] -> IO (Handle, Handle, Handle, ProcessHandle)
-- | Runs a command using the shell, and returns Handles that may be
-- used to communicate with the process via its stdin,
-- stdout, and stderr respectively.
runInteractiveCommand :: String -> IO (Handle, Handle, Handle, ProcessHandle)
-- | Computation system cmd returns the exit code produced when
-- the operating system runs the shell command cmd.
--
-- This computation may fail with one of the following IOErrorType
-- exceptions:
--
--
-- - PermissionDenied The process has insufficient
-- privileges to perform the operation.
-- - ResourceExhausted Insufficient resources are
-- available to perform the operation.
-- - UnsupportedOperation The implementation does not
-- support system calls.
--
--
-- On Windows, system passes the command to the Windows command
-- interpreter (CMD.EXE or COMMAND.COM), hence Unixy
-- shell tricks will not work.
--
-- On Unix systems, see waitForProcess for the meaning of exit
-- codes when the process died as the result of a signal.
system :: String -> IO ExitCode
-- | The computation rawSystem cmd args runs
-- the operating system command cmd in such a way that it
-- receives as arguments the args strings exactly as
-- given, with no funny escaping or shell meta-syntax expansion. It will
-- therefore behave more portably between operating systems than
-- system.
--
-- The return codes and possible failures are the same as for
-- system.
rawSystem :: String -> [String] -> IO ExitCode
-- | Executing an external command.
--
-- This module provides a simple interface for executing external
-- commands. For a more complex, but more powerful, interface, see the
-- System.Process module.
-- | Deprecated: Use System.Process instead
module System.Cmd
-- | Computation system cmd returns the exit code produced when
-- the operating system runs the shell command cmd.
--
-- This computation may fail with one of the following IOErrorType
-- exceptions:
--
--
-- - PermissionDenied The process has insufficient
-- privileges to perform the operation.
-- - ResourceExhausted Insufficient resources are
-- available to perform the operation.
-- - UnsupportedOperation The implementation does not
-- support system calls.
--
--
-- On Windows, system passes the command to the Windows command
-- interpreter (CMD.EXE or COMMAND.COM), hence Unixy
-- shell tricks will not work.
--
-- On Unix systems, see waitForProcess for the meaning of exit
-- codes when the process died as the result of a signal.
system :: String -> IO ExitCode
-- | The computation rawSystem cmd args runs
-- the operating system command cmd in such a way that it
-- receives as arguments the args strings exactly as
-- given, with no funny escaping or shell meta-syntax expansion. It will
-- therefore behave more portably between operating systems than
-- system.
--
-- The return codes and possible failures are the same as for
-- system.
rawSystem :: String -> [String] -> IO ExitCode