遇到一个概念性的问题:程序和进程有什么区别?
一个程序是代码和数据的集合。一个进程是程序执行时候的一个特殊实例。程序总是运行于一个进程之中。
对于进程和程序概念性的区分对于理解fork函数和execl函数都是有很大帮助的。fork在相同的程序之中创建一个新的子进程,子进程具有父进程的很多性质,除了
fork返回值不同
PID不同
两者的父进程不同
父进程如果有文件锁,子进程不继承
父进程附加的信号,子进程不具有
tms结构体的值不同
几乎没有什么是不同的。在很大程度上,子进程 是父进程的一份拷贝
而exe family函数可以加载并运行新的程序。
很多时候,由于程序单进程而导致进程和程序的概念区分不清。这里要特别注意
一个进程触发和初始化一个程序!而一个程序能够多进程化,同时运行多个应用。
一个程序是可执行指令集的集合,目的是完成既定任务。
一个进程是一个模块,这个模块可以并行的执行其他模块。这些模块分别被加载到同一个用户指定的程序中。
Process is always dependent on execution of a program.
好比我写了一个hello world的source file。这个时候我编译链接完成生成了一个./a.out
这个时候./a.out就是程序,他是数据和代码的集合,他是可执行的程序。这个时候还没process什么事
当我们在运行这个程序的时候,系统就会为我们的./a.out创建进程,进程就会触发并初始化我们的程序。在当前系统上执行这个程序的可执行指令。