Just a gap filler for the interested...
: : I was just wondering that this processID is generated differently
: : every time we start the program or is constant for a particular Application ?
: :
: : And what about Process ID's of different versions running of same Application ????
: :
: : Is processID somehow related to the caption of the parent windows ????
:
: A new processID is generated every time you start a process. It might be random but it is unique on that system. It's how Windows keeps track of processes.
:
That's right. The big thing to remember with processes is that a process is not the same as program. A program is just a bunch of bytes that represent instructions to the processor. A process on the other hand is the "instantiation" of a program - a bit like in OOP where the class contains your code, then an object is an instantiation of that code. Also, a process isn't just a copy of the program in memory being executed - it has the context of the program to (e.g. program counter, stack base, page table, registers...)
On Win32 you create a new process using the CreateProcess system call. You give it the name of the executable that you want to create the process from. It sets up the process and, like KDL says, gives it a unique ID - this turns out to be a numerical ID on every OS I've ever studied.
On UNIX things are different. A process can fork() another process, which basically clones the current process. If you then want that procoess to become another program, you use another system call (execve usually). However, you can also do this to make your own program concurrent. The upshot of all of this is that in UNIX every process has a parent, and usually if the parent terminates so does the child (parents are exepcted to reap their kids, otherwise they become zombies - yeah, I know, UNIX has better terminology than Win32...

).
If you want to have multiple copies of one program running, they will each have a different process ID. As a memory-saving optimisation, the operating system may actually only load one copy of the program's executable code into memory and map other processes to that same code. This is done with DLLs too - so they only need to be loaded into memory once even if many programs use them.
OK, that's my operating systems exam revision for the day.
Jonathan
###
for(74,117,115,116){$::a.=chr};(($_.='qwertyui')&&
(tr/yuiqwert/her anot/))for($::b);for($::c){$_.=$^X;
/(p.{2}l)/;$_=$1}$::b=~/(..)$/;print("$::a$::b $::c hack$1.");