summaryrefslogtreecommitdiffstats
path: root/posix-users/process_creation_and_execution.rst
diff options
context:
space:
mode:
Diffstat (limited to 'posix-users/process_creation_and_execution.rst')
-rw-r--r--posix-users/process_creation_and_execution.rst421
1 files changed, 421 insertions, 0 deletions
diff --git a/posix-users/process_creation_and_execution.rst b/posix-users/process_creation_and_execution.rst
new file mode 100644
index 0000000..1668695
--- /dev/null
+++ b/posix-users/process_creation_and_execution.rst
@@ -0,0 +1,421 @@
+.. comment SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. COMMENT: COPYRIGHT (c) 1988-2002.
+.. COMMENT: On-Line Applications Research Corporation (OAR).
+.. COMMENT: All rights reserved.
+
+Process Creation and Execution Manager
+######################################
+
+Introduction
+============
+
+The process creation and execution manager provides the functionality
+associated with the creation and termination of processes.
+
+The directives provided by the process creation and execution manager are:
+
+- fork_ - Create a Process
+
+- execl_ - Execute a File
+
+- execv_ - Execute a File
+
+- execle_ - Execute a File
+
+- execve_ - Execute a File
+
+- execlp_ - Execute a File
+
+- execvp_ - Execute a File
+
+- pthread_atfork_ - Register Fork Handlers
+
+- wait_ - Wait for Process Termination
+
+- waitpid_ - Wait for Process Termination
+
+- `_exit`_ - Terminate a Process
+
+Background
+==========
+
+POSIX process functionality can not be completely supported by RTEMS. This is
+because RTEMS provides no memory protection and implements a *single process,
+multi-threaded execution model*. In this light, RTEMS provides none of the
+routines that are associated with the creation of new processes. However,
+since the entire RTEMS application (e.g. executable) is logically a single
+POSIX process, RTEMS is able to provide implementations of many operations on
+processes. The rule of thumb is that those routines provide a meaningful
+result. For example, ``getpid()`` returns the node number.
+
+Operations
+==========
+
+The only functionality method defined by this manager which is supported by
+RTEMS is the ``_exit`` service. The implementation of ``_exit`` shuts the
+application down and is equivalent to invoking either ``exit`` or
+``rtems_shutdown_executive``.
+
+Directives
+==========
+
+This section details the process creation and execution manager's directives.
+A subsection is dedicated to each of this manager's directives and describes
+the calling sequence, related constants, usage, and status codes.
+
+.. _fork:
+
+fork - Create a Process
+-----------------------
+.. index:: fork
+.. index:: create a process
+
+**CALLING SEQUENCE:**
+
+.. code-block:: c
+
+ #include <sys/types.h>
+ int fork( void );
+
+**STATUS CODES:**
+
+.. list-table::
+ :class: rtems-table
+
+ * - ``ENOSYS``
+ - This routine is not supported by RTEMS.
+
+**DESCRIPTION:**
+
+This routine is not supported by RTEMS.
+
+**NOTES:**
+
+NONE
+
+.. _execl:
+
+execl - Execute a File
+----------------------
+.. index:: execl
+.. index:: execute a file
+
+**CALLING SEQUENCE:**
+
+.. code-block:: c
+
+ int execl(
+ const char *path,
+ const char *arg,
+ ...
+ );
+
+**STATUS CODES:**
+
+.. list-table::
+ :class: rtems-table
+
+ * - ``ENOSYS``
+ - This routine is not supported by RTEMS.
+
+**DESCRIPTION:**
+
+This routine is not supported by RTEMS.
+
+**NOTES:**
+
+NONE
+
+.. _execv:
+
+execv - Execute a File
+----------------------
+.. index:: execv
+.. index:: execute a file
+
+**CALLING SEQUENCE:**
+
+.. code-block:: c
+
+ int execv(
+ const char *path,
+ char const *argv[],
+ ...
+ );
+
+**STATUS CODES:**
+
+.. list-table::
+ :class: rtems-table
+
+ * - ``ENOSYS``
+ - This routine is not supported by RTEMS.
+
+**DESCRIPTION:**
+
+This routine is not supported by RTEMS.
+
+**NOTES:**
+
+NONE
+
+.. _execle:
+
+execle - Execute a File
+-----------------------
+.. index:: execle
+.. index:: execute a file
+
+**CALLING SEQUENCE:**
+
+.. code-block:: c
+
+ int execle(
+ const char *path,
+ const char *arg,
+ ...
+ );
+
+**STATUS CODES:**
+
+.. list-table::
+ :class: rtems-table
+
+ * - ``ENOSYS``
+ - This routine is not supported by RTEMS.
+
+**DESCRIPTION:**
+
+This routine is not supported by RTEMS.
+
+**NOTES:**
+
+NONE
+
+.. _execve:
+
+execve - Execute a File
+-----------------------
+.. index:: execve
+.. index:: execute a file
+
+**CALLING SEQUENCE:**
+
+.. code-block:: c
+
+ int execve(
+ const char *path,
+ char *const argv[],
+ char *const envp[]
+ );
+
+**STATUS CODES:**
+
+.. list-table::
+ :class: rtems-table
+
+ * - ``ENOSYS``
+ - This routine is not supported by RTEMS.
+
+**DESCRIPTION:**
+
+This routine is not supported by RTEMS.
+
+**NOTES:**
+
+NONE
+
+.. _execlp:
+
+execlp - Execute a File
+-----------------------
+.. index:: execlp
+.. index:: execute a file
+
+**CALLING SEQUENCE:**
+
+.. code-block:: c
+
+ int execlp(
+ const char *file,
+ const char *arg,
+ ...
+ );
+
+**STATUS CODES:**
+
+.. list-table::
+ :class: rtems-table
+
+ * - ``ENOSYS``
+ - This routine is not supported by RTEMS.
+
+**DESCRIPTION:**
+
+This routine is not supported by RTEMS.
+
+**NOTES:**
+
+NONE
+
+.. _execvp:
+
+execvp - Execute a File
+-----------------------
+.. index:: execvp
+.. index:: execute a file
+
+**CALLING SEQUENCE:**
+
+.. code-block:: c
+
+ int execvp(
+ const char *file,
+ char *const argv[],
+ ...
+ );
+
+**STATUS CODES:**
+
+.. list-table::
+ :class: rtems-table
+
+ * - ``ENOSYS``
+ - This routine is not supported by RTEMS.
+
+**DESCRIPTION:**
+
+This routine is not supported by RTEMS.
+
+**NOTES:**
+
+NONE
+
+.. _pthread_atfork:
+
+pthread_atfork - Register Fork Handlers
+---------------------------------------
+.. index:: pthread_atfork
+.. index:: register fork handlers
+
+**CALLING SEQUENCE:**
+
+.. code-block:: c
+
+ #include <sys/types.h>
+ int pthread_atfork(
+ void (*prepare)(void),
+ void (*parent)(void),
+ void (*child)(void)
+ );
+
+**STATUS CODES:**
+
+.. list-table::
+ :class: rtems-table
+
+ * - ``ENOSYS``
+ - This routine is not supported by RTEMS.
+
+**DESCRIPTION:**
+
+This routine is not supported by RTEMS.
+
+**NOTES:**
+
+NONE
+
+.. _wait:
+
+wait - Wait for Process Termination
+-----------------------------------
+.. index:: wait
+.. index:: wait for process termination
+
+**CALLING SEQUENCE:**
+
+.. code-block:: c
+
+ #include <sys/types.h>
+ #include <sys/wait.h>
+ int wait(
+ int *stat_loc
+ );
+
+**STATUS CODES:**
+
+.. list-table::
+ :class: rtems-table
+
+ * - ``ENOSYS``
+ - This routine is not supported by RTEMS.
+
+**DESCRIPTION:**
+
+This routine is not supported by RTEMS.
+
+**NOTES:**
+
+NONE
+
+.. _waitpid:
+
+waitpid - Wait for Process Termination
+--------------------------------------
+.. index:: waitpid
+.. index:: wait for process termination
+
+**CALLING SEQUENCE:**
+
+.. code-block:: c
+
+ int wait(
+ pid_t pid,
+ int *stat_loc,
+ int options
+ );
+
+**STATUS CODES:**
+
+.. list-table::
+ :class: rtems-table
+
+ * - ``ENOSYS``
+ - This routine is not supported by RTEMS.
+
+**DESCRIPTION:**
+
+This routine is not supported by RTEMS.
+
+**NOTES:**
+
+NONE
+
+.. _\_exit:
+
+_exit - Terminate a Process
+---------------------------
+.. index:: _exit
+.. index:: terminate a process
+
+**CALLING SEQUENCE:**
+
+.. code-block:: c
+
+ void _exit(
+ int status
+ );
+
+**STATUS CODES:**
+
+NONE
+
+**DESCRIPTION:**
+
+The ``_exit()`` function terminates the calling process.
+
+**NOTES:**
+
+In RTEMS, a process is equivalent to the entire application on a single
+processor. Invoking this service terminates the application.