Linux 核心--5.Linux进程( 九 )


另一方面 , 动态连接映象并不包含全部运行所需要的代码和数据 。其中的一部分仅在运行时才连接到共享库中 。ELF共享库列表还在运行时连接到共享库时被动态连接器使用 。Linux使用几个动态连接器 , 如ld.so.1 , libc.so.1和ld-linux.so.1 , 这些都放置在/lib目录中 。这些库中包含常用代码 , 如C语言子程序等 。如果没有动态连接 , 所有程序将不得不将所有库过程拷贝一份并连接进来 , 这样将需要更多的磁盘与虚拟内存空间 。通过动态连接 , 每个被引用库过程的信息都可以包含在ELF映象列表中 。这些信息用来帮助动态连接器定位库过程并将它连入程序的地址空间 。




4.8.2脚本文件
脚本文件的运行需要解释器的帮助 。Linux中有许许多多的解释器;例如wish、perl以及命令外壳程序tcsh 。Linux使用标准的Unix规则 , 在脚本文件的第一行包含了脚本解释器的名字 。典型的脚本文件的开头如下:

#!/usr/bin/wish

此时命令解释器会试着寻找脚本解释器 。然后它打开此脚本解释器的执行文件得到一个指向此文件的VFS inode并使此脚本解释器开始解释此脚本 。这时脚本文件名变成了脚本解释器的0号参数(第一个参数)并且其余参数向上挪一个位置(原来的第一个参数变成第二个) 。脚本解释器的加载过程与其他可执行文件相同 。Linux会逐个尝试各种二进制可执行格式直到它可以执行 。

推荐阅读