子进程执行int chdir(const char *path)是否影响父进程?请说明原因
子进程执行
chdir()是否会影响父进程? 答案:否
这个问题的核心在于进程的独立性:
- 父进程创建子进程后,二者是完全独立的执行实体,各自拥有专属的进程控制块(PCB),而当前工作目录就是存储在PCB里的进程私有属性。
- 子进程初始会继承父进程的当前目录,但这只是一份“副本”,后续子进程对目录的修改只会作用于自己的PCB,不会反向波及父进程。
- 调用
chdir(const char *path)时,该函数仅会修改调用它的进程的当前工作目录,操作范围严格限制在当前进程内部。
给你个直观的代码验证例子:
#include <stdio.h> #include <unistd.h> #include <sys/wait.h> int main() { char cwd[1024]; // 父进程打印初始目录 getcwd(cwd, sizeof(cwd)); printf("父进程初始目录: %s\n", cwd); pid_t pid = fork(); if (pid == 0) { // 子进程切换目录 chdir("/tmp"); getcwd(cwd, sizeof(cwd)); printf("子进程切换后的目录: %s\n", cwd); _exit(0); } else { // 父进程等待子进程结束 wait(NULL); // 父进程再次打印目录 getcwd(cwd, sizeof(cwd)); printf("父进程最终目录: %s\n", cwd); } return 0; }
运行这段代码你会发现,父进程的目录从头到尾都没有变化,完全不受子进程chdir()操作的影响。
内容的提问来源于stack exchange,提问作者Ugur Tufekci
相关产品推荐
相关产品推荐

