Mac OS X is a multiprocessing operating system. Independent processes are given slices of CPU time, giving the illusion that all of the programs on the system are running concurrently.
Sometimes your programs need to create new processes to do their work. You can use one of the convenience functions like system() or popen() to run pipelines in a shell. You can also use fork() and exec() directly to create a new child process and execute a new program in that processes. You can use pipe() to establish a communications channel between related processes.