我正在阅读“Unix 编程环境”,但我不理解当前进程目录的概念。
每个进程都有一个当前目录,并且所有文件名都被隐式假定为以该目录的名称开头,除非它们直接以斜杠开头。
这是否意味着每个进程在它创建的目录中都有一个标志?例如,如果程序/bin/sed是从 调用的/home/rene,那么通过调用 sed 创建的进程的当前目录是/home/rene?
小智 13
概念层面
从 shell 启动进程时,进程的当前工作目录与 shell 的当前工作目录相同。在 shell 的上下文中,当前工作目录是您当前“所在”的位置。
任何进程的当前工作目录用于解释相对路径。例如,如果您的 shell 的当前工作目录是/home/rene并且您ls ..从 shell 运行,则进程的当前工作目录/home/rene将用于解析..为/home.
您可以查看系统上运行的所有进程的当前工作目录lsof | grep '\scwd\s'(请注意,您可能需要以 root 身份查看其他用户的进程。)这可以让您了解当前工作目录与在您的系统上运行的进程。
程序级别
外壳的当前工作目录是你看到的,并与shell内置修改目录pwd和cd分别。这些命令调用系统调用,例如getcwd和chdir与 shell 的当前工作目录一起使用。
使用bash作为一个例子,cd内置的最终运行这一行:
if (chdir (nolinks ? newdir : tdir) == 0)
Run Code Online (Sandbox Code Playgroud)
和pwd内置最终运行这一行:
the_current_working_directory = getcwd (0, PATH_MAX);
Run Code Online (Sandbox Code Playgroud)
shell 只是当前工作目录使用的一个方便示例;其他程序也使用这些相同的系统调用。程序可以将其当前工作目录更改为/usr,并且程序使用的任何相对路径都将从该/usr目录开始,
内核级别
进程的当前工作目录由内核存储。Linux 将其存储在 a 的pwd成员所fs_struct指向的 a的fs成员中task_struct。该pwd成员是一个path结构体,它指向有关挂载 ( vfsmount) 和目录在文件系统 ( dentry) 中的位置的信息。每个进程都有一个task_struct与之关联的。
该chdir和getcwd系统调用修改和检索信息pwd。
| 归档时间: |
|
| 查看次数: |
4180 次 |
| 最近记录: |