GNU/Linux >> Znalost Linux >  >> Linux

Jak nastavím pracovní adresář nadřazeného procesu?

Příkaz chdir je vestavěný do shellu, takže má přímý přístup k pracovnímu adresáři shellu, který jej spouští. Skořápky se obvykle docela dobře chrání před účinky skriptů a dávají dětskému procesu kopii vlastního pracovního prostředí shellu. Když se podřízený proces ukončí, smaže se prostředí, které používal.

Jedna věc, kterou můžete udělat, je „zdroj“ skriptu. To vám umožní změnit adresář, protože v podstatě říkáte shellu, aby provedl příkazy ze souboru, jako byste je zadali přímo. To znamená, že nepracujete z kopie prostředí shellu, pracujete přímo na něm při získávání zdrojů.


Neexistuje žádný "legální" způsob, jak ovlivnit aktuální adresář nadřazeného procesu, kromě požadavku na nadřazený proces, aby jej sám změnil.

chdir který mění adresář v bash skriptech není externí nástroj, je to vestavěný příkaz.


Nedělejte to.

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);

Pravděpodobně bude práce, i když si všimněte, že Bash je pwd příkaz je uložen v mezipaměti a nevšimne si ho.


Linux
  1. Nový rodičovský proces, když rodičovský proces zemře?

  2. Linux – Jak nastavit afinitu procesoru k procesu v Linuxu?

  3. Jak zabít proces, jehož rodič je init?

  1. Jak nastavit Evil Bit na odchozí provoz

  2. Jak zabít zombie proces

  3. Jak mohu nastavit afinitu procesoru k procesu v systému Linux?

  1. Jak nainstalovat R 3.3.1 do vlastního adresáře?

  2. Jak zajistit, aby Localhost s jiným adresářem než index fungoval?

  3. Jak nastavit název vlákna v Linuxu pthreads?