what is the diff b/w background and foreground process

What are all the difference between a Background and Foreground processes ?!

A Background process does not have access to STDIN and OUT.. What else ?
Is there any detailed description available somewhere ?

If you don't believe a background process has access to STDOUT, how would you explain

ls &

?

---------- Post updated at 08:28 AM ---------- Previous update was at 08:20 AM ----------

I have to say that this smells ike homework to me, which is why I made a smarmy reply the first time, but just in case it is not:

When a shell executes a fg command, it does a wait(). For a bg command it does not. That's the real difference; everything else is implementation.

There is no major difference between the two.

The background process runs asynchronously (in the background), and the other one doesn't.

The result of a background process is always 0.

While a background process is running shell doesn't wait for the completion
of execution.
But while running a foreground process shell waits until the completion of
execution.

And we can have only one foreground job and more background jobs.

When you are putting & at the suffix of a command name then it will be run as a background process.
And if you put fg command then it can be switch back to run in foreground process

For unix, there is no real difference between both modes of a process. But sometimes a shell sends signals to processes running in foreground when a user does something (think off the ^Z or ^C in most shells). Per default it is best to run a daemon in background or have the daemon itself force this by starting with a fork and exiting the main process.