blob: e800ee01d6070c70c14652f83a2cca49b7a000ba [file] [log] [blame]
<html lang="en">
<head>
<title>Program Basics - The GNU C Library</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="The GNU C Library">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="prev" href="Signal-Handling.html#Signal-Handling" title="Signal Handling">
<link rel="next" href="Processes.html#Processes" title="Processes">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
This file documents the GNU C library.
This is Edition 0.12, last updated 2007-10-27,
of `The GNU C Library Reference Manual', for version
2.8 (Sourcery G++ Lite 2011.03-41).
Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002,
2003, 2007, 2008, 2010 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Free Software Needs Free Documentation''
and ``GNU Lesser General Public License'', the Front-Cover texts being
``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A
copy of the license is included in the section entitled "GNU Free
Documentation License".
(a) The FSF's Back-Cover Text is: ``You have the freedom to
copy and modify this GNU manual. Buying copies from the FSF
supports it in developing GNU and promoting software freedom.''-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="Program-Basics"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Processes.html#Processes">Processes</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Signal-Handling.html#Signal-Handling">Signal Handling</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
<hr>
</div>
<!-- %MENU% Writing the beginning and end of your program -->
<h2 class="chapter">25 The Basic Program/System Interface</h2>
<p><a name="index-process-3002"></a><a name="index-program-3003"></a><a name="index-address-space-3004"></a><a name="index-thread-of-control-3005"></a><dfn>Processes</dfn> are the primitive units for allocation of system
resources. Each process has its own address space and (usually) one
thread of control. A process executes a program; you can have multiple
processes executing the same program, but each process has its own copy
of the program within its own address space and executes it
independently of the other copies. Though it may have multiple threads
of control within the same program and a program may be composed of
multiple logically separate modules, a process always executes exactly
one program.
<p>Note that we are using a specific definition of &ldquo;program&rdquo; for the
purposes of this manual, which corresponds to a common definition in the
context of Unix system. In popular usage, &ldquo;program&rdquo; enjoys a much
broader definition; it can refer for example to a system's kernel, an
editor macro, a complex package of software, or a discrete section of
code executing within a process.
<p>Writing the program is what this manual is all about. This chapter
explains the most basic interface between your program and the system
that runs, or calls, it. This includes passing of parameters (arguments
and environment) from the system, requesting basic services from the
system, and telling the system the program is done.
<p>A program starts another program with the <code>exec</code> family of system calls.
This chapter looks at program startup from the execee's point of view. To
see the event from the execor's point of view, see <a href="Executing-a-File.html#Executing-a-File">Executing a File</a>.
<ul class="menu">
<li><a accesskey="1" href="Program-Arguments.html#Program-Arguments">Program Arguments</a>: Parsing your program's command-line arguments.
<li><a accesskey="2" href="Environment-Variables.html#Environment-Variables">Environment Variables</a>: Less direct parameters affecting your program
<li><a accesskey="3" href="System-Calls.html#System-Calls">System Calls</a>: Requesting service from the system
<li><a accesskey="4" href="Program-Termination.html#Program-Termination">Program Termination</a>: Telling the system you're done; return status
</ul>
</body></html>