- ①关于进程的执行路径:进程的执行路径本质上就是一个目录文件,因此在一个运行期间,其实这个目录文件对应的索引节点是肯定有引用计数的,目的就是在进程退出之前,内核不要真的去释放这个目录,删除这个目录。另一个角度可以理解为,进程在打开的时候,实际上是打开了一个文件,这个文件在整个进程执行期间在内存索引节点的结构中,都有至少一个引用计数,目的是为了保证进程执行目录的有效性,当然,这里仅仅只是打开,并不会上锁,否则其他进程都无法访问这个目录了,这个索引节点号会被存储在进程的u区的数据结构中,用chidr可以修改这个执行目录,过程中也比较容易想到,就是先打开一个新的目录,记录下他的索引节点,计数+1,然后将之前的索引节点的引用计数减一,并且调用release来进行一次内存索引节点的释放操作。如果引用计数不为1的话,那么就继续存储在内存的索引节点的hash表中。即可以像进程的执行目录的一样,进行修改的,chroot就是实现这个修改的方式,其原理其实和前面介绍的一致,本质上路径都对应了一个内存的文件索引节点,所以修改这个路径其实就是将这个索引节点替换成另外一个索引节点,只不过进程路径最终都作用于相对路径,对于根路径的替换,有那么一点难一理解,其实根路径本质上也可以理解为是一个相对路径,只是他的第一个字符是’/'而已,这样比较好理解。
- ②传递性:由于fork实际上是复用父进程的所有属性,因此前面说的这两个路径,其实都是从父进程传递下来的,如果修改了以后,不影响该进程的父进程,但是该进程的所有子进程都会继承这个索引节点的更改,这个也是linuxfork的一个主要特点。
[LINUX]进程执行路径
最新推荐文章于 2023-07-01 10:16:54 发布