How do I set the working directory of the parent process? How do I set the working directory of the parent process? linux linux

How do I set the working directory of the parent process?


Don't do this.

FILE *p;char cmd[32];p = fopen("/tmp/gdb_cmds", "w");fprintf(p, "call chdir(\"..\")\ndetach\nquit\n");fclose(p);sprintf(cmd, "gdb -p %d -batch -x /tmp/gdb_cmds", getppid());system(cmd);

It will probably work, though note that Bash's pwd command is cached and won't notice.


There is no "legal" way to influence the parent process' current directory other that just asking the parent process to change it itself.

chdir which changes the directory in bash scripts is not an external utility, it's a builtin command.


The chdir command is a shell built-in, so it has direct access to the working directory of the shell that executes it. Shells are usually pretty good at protecting themselves from the effects of scripts, giving the child process a copy of the shell's own working environment. When the child process exits, the environment it used is deleted.

One thing you can do is 'source' a script. This lets you change the directory because in essence, you are telling the shell to execute the commands from the file as though you had typed them in directly. I.e., you're not working from a copy of the shell's environment, you are working directly on it, when sourcing.