一、程序和进程之间的关系
程序是一个存储在硬盘上的可执行文件,而进程是一个程序运行所需信息的集合,包括页表,打开的文件,CPU寄存器集等等,也就是所谓的execution context。但是程序却包含execution context初始化时所需信息。
二、可执行文件
可执行文件一般保存在硬盘上,它包含程序执行所需要的一系列函数(处理器指令)和这些函数所需要的数据。其中有些函数是编程人员自己实现的,但有一些公共函数是以Library形式提供的,在源程序编译时,可以选择将这些Libraries静态链接,或者是动态链接到可执行文件。
三、命令行和环境变量
为了使程序更具灵活性,可以通过命令行和环境变量来改变程序运行行为
1、命令行
当我们在shell中敲入“ls”命令时,我们一般会通过命令行传入参数,来查看不同目录下的内容。
2、环境变量
当我们在shell中敲入“ls”命令时,shell会先fork一个进程,然后用“ls”命令对应的可执行文件内容替换fork出来的新进程,同时将shell自身的环境变量(如HOME,PATH等)传递给新进程。
参考资料:《understanding Linux kernel》 |