程序到进程的转变:查找命令、fork与exec

需积分: 15 41 下载量 192 浏览量 更新于2024-08-05 收藏 24.46MB PDF 举报
"查找命令对应程序文件的位置-mil-hdbk-338b" 在操作系统中,进程扮演着至关重要的角色。本章聚焦于进程及其通信机制,详细介绍了进程环境和进程状态,以及如何从程序转变为进程的过程。进程是程序在特定上下文中的执行实例,拥有独立的内存空间和资源,而程序则是一个静态的文件,存储在硬盘上的可执行映像。在Linux系统中,例如,`/bin`、`/sbin`、`/usr/bin`、`/usr/sbin`等目录下保存着大量的程序文件。 当我们在Shell中运行命令时,程序会通过三个关键步骤转化为进程: 1. 查找命令对应程序文件的位置。系统会在预定义的路径中,比如`$PATH`环境变量指定的目录里搜索命令对应的可执行文件。 2. 使用`fork()`系统调用创建一个新的进程。`fork()`创建了一个与父进程相似的新进程,两者共享大部分资源,但具有独立的进程ID。 3. 在新进程中调用`exec`族函数(如`execl()`, `execv()`, `execle()`, `execvp()`等)加载程序文件,并替换当前进程的映像,执行程序的`main()`函数。 Linux中的进程有六种状态: - D:不可中断的深度睡眠,此时进程不会响应任何异步信号。 - R:运行态或就绪态,能获得CPU执行权。 - S:可中断的睡眠,等待某个事件的发生。 - T:暂停或跟踪状态,用于调试。 - X:退出状态,进程即将被销毁。 - Z:僵尸状态,进程已结束但其资源还未被完全回收。 进程在执行期间,状态会根据其生命周期和外部事件进行转换。例如,一个进程可能会从运行态变为睡眠态,等待I/O操作完成,然后再次变为就绪态,最后由操作系统调度执行。 嵌入式Linux,特别是与周立功相关的技术,是Linux操作系统在单片机和嵌入式设备上的应用,提供了轻量级的解决方案,适合资源有限的硬件平台。这部分内容通常涵盖了嵌入式开发的基础,包括内核定制、驱动程序开发和应用程序接口(API)的使用,以实现高效可靠的嵌入式系统设计。 了解这些基础知识对于理解和操作Linux系统至关重要,无论是进行桌面应用开发还是嵌入式系统的设计,都需掌握进程管理和通信机制,以实现多任务并行和高效资源利用。