GNU/Linux >> Znalost Linux >  >> Linux

Linux – Změnit /proc/pid/environ po spuštění procesu?

$ k=v p &
[1] 3028

existuje nějaký způsob pro p pro změnu obsahu /proc/3028/environ nemluvě o k=v zatímco p stále běží?

Přijatá odpověď:

V Linuxu můžete přepsat hodnotu řetězců prostředí v zásobníku.

Položku tedy můžete skrýt tak, že ji přepíšete nulami nebo čímkoli jiným:

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char* argv[], char* envp[]) {
  char cmd[100];

  while (*envp) {
    if (strncmp(*envp, "k=", 2) == 0)
      memset(*envp, 0, strlen(*envp));

    envp++;
  }

  sprintf(cmd, "cat /proc/%u/environ", getpid());

  system(cmd);
  return 0;
}

Spustit jako:

$ env -i a=foo k=v b=bar ./wipe-env | hd
00000000  61 3d 66 6f 6f 00 00 00  00 00 62 3d 62 61 72 00  |a=foo.....b=bar.|
00000010

k=v byl přepsán

Linux
  1. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  2. /proc/[pid]/pagemaps a /proc/[pid]/maps | linux

  3. změnit /proc/PID/environ po spuštění procesu

  1. Linux – Získávání informací o využití paměti procesu z /proc/pid/smaps?

  2. Linux – /proc/pid/fd/x Číslo odkazu?

  3. Linux – význam Proc//fdinfo/0? Kdo to vytváří?

  1. Linux – Jak číst z /proc/$pid/mem pod Linuxem?

  2. Linux – Změnit /proc/pid/environ po spuštění procesu?

  3. Linux – sloučení /usr/bin A /usr/sbin do /bin (gnu/linux)?