Linux-Umgebungsvariablen und Prozessadressraum//Prozess-PID und übergeordneten Prozess anzeigen [dy@VM-12-10-centos jincheng_12_5]$ ps ajx | head -1 && ps axj | grep 3669470 PPID PID PGID SID TTY TPGID STAT UID ZEIT BEFEHL 3669469 3669470 3669470 3669439 Punkte/0 3681645 S 1001 0:00 -bash 3669470 3681645 3681645 3669439 Punkte/0 3681645 R+ 1001 0:00 ps axj 3669470 3681646 3681645 3669439 Punkte/0 3681645 R+ 1001 0:00 grep --color=auto 3669470 //Die erste Methode zum Ausführen des Programms ohne Hinzufügen eines Pfads [dy@VM-12-10-centos jincheng_12_5]$ ll insgesamt 28 -rw-rw-r-- 1 Tag Tag 73 5. Dez. 16:46 Makefile -rwxrwxr-x 1 Tag Tag 17432 5. Dez. 16:47 proc -rw-rw-r-- 1 Tag Tag 75 5. Dez. 16:47 proc.c [dy@VM-12-10-centos jincheng_12_5]$ sudo cp proc /usr/bin/ //Eigenes ausführbares Programm zum Systempfad hinzufügen [sudo] Passwort für dy: [dy@VM-12-10-centos jincheng_12_5]$ proc //Fügen Sie dem Systempfad Ihr eigenes ausführbares Programm hinzu, und Sie müssen den Pfad ./ nicht hinzufügen. Hallo Welt! [dy@VM-12-10-centos jincheng_12_5]$ ./proc Hallo Welt! [dy@VM-12-10-centos jincheng_12_5]$ sudo rm /usr/bin/proc //Aus dem Systempfad löschen [dy@VM-12-10-centos jincheng_12_5]$ proc -bash: /usr/bin/proc: Keine solche Datei oder kein solches Verzeichnis //Der zweite Typ [dy@VM-12-10-centos jincheng_12_5]$ $PATH -bash: /home/dy/.local/bin:/home/dy/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin: Keine solche Datei oder kein solches Verzeichnis [dy@VM-12-10-centos jincheng_12_5]$ pwd /home/dy/jincheng_12_5 //Füge den aktuellen Pfad zur Umgebungsvariable PATH hinzu [dy@VM-12-10-centos jincheng_12_5]$ PATH=$PATH:/home/dy/jincheng_12_5 [dy@VM-12-10-centos jincheng_12_5]$ proc Hallo Welt! //Nur 3000 Befehle speichern [dy@VM-12-10-centos jincheng_12_5]$ echo $HISTSIZE 3000 //Zeigen, wie viele Befehle zuvor ausgeführt wurden [dy@VM-12-10-centos jincheng_12_5]$ history |wc -l 636 [dy@VM-12-10-centos jincheng_12_5]$ Verlauf // Alle vorherigen Befehle auf dem Display ausgeben // Alle Umgebungsvariablen anzeigen [dy@VM-12-10-centos jincheng_12_5]$ env LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.m4a=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.oga=01;36:*.opus=01;36:*.spx=01;36:*.xspf=01;36: LANG=en_US.utf8 HISTTIMEFORMAT=%F %T HOSTNAME=VM-12-10-centos OLDPWD=/home/dy USER=dy PWD=/home/dy/jincheng_12_5 HOME=/Heimat/dy MAIL=/var/spool/mail/dy SHELL=/bin/bash TERM=xterm SHLVL=1 PROMPT_COMMAND=Verlauf -a; Verlauf -a; printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}" LOGNAME=dy PATH=/home/dy/.local/bin:/home/dy/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dy/jincheng_12_5 HISTSIZE=3000 LESSOPEN=||/usr/bin/lesspipe.sh %s _=/usr/bin/env echo: Zeigt den Wert einer Umgebungsvariablen an export: Neue Umgebungsvariable festlegen [dy@VM-12-10-centos jincheng_12_5]$ ./proc //Lokale Variablen existieren nicht. Ich bin ein Proc: pid:3700079 ppid:3669470 Segmentierungsfehler (Core Dump) [dy@VM-12-10-centos jincheng_12_5]$ export MY_VAL [dy@VM-12-10-centos jincheng_12_5]$ ./proc Ich bin ein Proc: pid:3700163 ppid:3669470 hallo dy /home/dy/.local/bin:/home/dy/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dy/jincheng_12_5 /Startseite/dy /bin/bash env: Alle Umgebungsvariablen anzeigen unset: Umgebungsvariablen löschen Umgebungsvariable env set: Lokal definierte Shell-Variablen und Umgebungsvariablen anzeigen //Umgebungsvariablen festlegen [dy@VM-12-10-centos jincheng_12_5]$ hello=1234 //Denken Sie daran, $ zu den Ausgabeumgebungsvariablen hinzuzufügen [dy@VM-12-10-centos jincheng_12_5]$ echo $hello 1234 [dy@VM-12-10-centos jincheng_12_5]$ set | grep hallo hallo=1234 Die meisten Befehle, die in der Befehlszeile ausgeführt werden, haben Bash als übergeordneten Prozess. Bash erstellt untergeordnete Prozesse, die Ihre Befehle ausführen. Abrufen von Umgebungsvariablen über Code#include <stdio.h> #include<stdlib.h> #include <unistd.h> int main(int argc, char *argv[], char *env[]) { for(int i = 0; argv[i]; ++i)//Kommandozeilenparameter interpretieren//for(int i = 0; i < argc; ++i) { printf("argv[%d]:%s\n",i,argv[i]); } for(int i = 0; env[i]; ++i) //Die Umgebungsvariable erhältst du über den Code { printf("Umgebung[%d]: %s\n",i,Umgebung[i]); } gebe 0 zurück; } int x = atoi(argv[2]); argv[3]); wenn (strcmp(argv[1],"-a") == 0) { druckenf("%d + %d = %d\n",x,y,x+y); } anders { drucken("%d - %d = %d\n",x,y,xy); }
#include <stdio.h> int main(int argc, char *argv[]) { externer Zeichen **Umgebung; } für(; Umgebung[i]; i++){ printf("%s\n", Umgebung[i]); } gebe 0 zurück; } Prozessadressraum#include <stdio.h> #include <unistd.h> Gibt an, ob g_val 0 ist. int main() { pid_t id = fork(); wenn(id < 0) { perror("fork() schlägt fehl\n"); } sonst wenn (id == 0) { printf("Ich bin ein Kind:%d,%d,%p\n",getpid(),g_val,&g_val); }anders { printf("Ich bin ein Vater: %d, %d, %p\n",getppid(),g_val,&g_val); } gebe 0 zurück; }
Lassen Sie uns den Code leicht ändern #include <stdio.h> #include <unistd.h> } int main() { pid_t id = fork(); wenn(id < 0) { perror("fork() fehlgeschlagen"); } sonst wenn (id == 0) { g_val = 100; printf("Ich bin ein Kind:%d,%d,%p\n",getpid(),g_val,&g_val); }anders { Schlaf (3); printf("Ich bin ein Vater: %d, %d, %p\n",getppid(),g_val,&g_val); } gebe 0 zurück; } An diesem Punkt stellen wir fest, dass sich der Wert der Variablen geändert hat, der übergeordnete Prozess ist 0, der untergeordnete Prozess ist 100, aber die Adresse der Variablen ist immer noch dieselbe.
Warum ist es eine virtuelle Adresse und keine physische Adresse?Was ist Prozessadressraum? Prozessadressraum: Dies ist eine Art, den Speicher zu betrachten, ein abstraktes Konzept, Kernelstruktur mm-Struktur, sodass jeder Prozess denkt, er habe exklusive Systemspeicherressourcen (Sie denken, das Eigentum Ihres Vaters gehört nur Ihnen). Regionsaufteilung: Der Adressraum ist linear und nacheinander in eine Region unterteilt, [Start, Ende] Virtuelle Adresse: Jede Adresse zwischen [Start, Ende] wird als virtuelle Adresse bezeichnet Eine Zuordnung von virtuellen Adressen zu physischen Adressen Warum gibt es Prozessadressraum? Schützen Sie den physischen Speicher und verhindern Sie den direkten Zugriff auf Adressen innerhalb eines Prozesses. So lässt sich die Legitimitätsprüfung einfacher gestalten. Entkoppeln Sie die Speicherverwaltung von der Prozessverwaltung, sodass jeder Prozess Code und Daten auf die gleiche Weise anzeigen kann. Von nun an können wir direkt zwischen Prozess und Programm unterscheiden. Dies ist das Ende dieses Artikels über Linux-Umgebungsvariablen und Prozessadressraum. Weitere relevante Inhalte zu Linux-Umgebungsvariablen und Prozessraum finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Wird CSS3 SCSS wirklich ersetzen?
>>: Bootstrap 3.0-Lernunterlagen für Anfänger
Inhaltsverzeichnis React-Fasererstellung 1. Bevor...
Als Nächstes werde ich zwei Tabellen erstellen un...
Inhaltsverzeichnis Kurze Umfrage Langfristige Abf...
Keepalived+Nginx+Tomcat zur Erzielung eines hochv...
Rendern Wenn Sie den im Bild unten gezeigten Effe...
Vorwort Um beim Testen die Fähigkeit des Projekts...
1. Einleitung Kürzlich habe ich festgestellt, das...
Beachten! ! ! Diese Situation kann bei der Instal...
Fügen Sie der Webseite ein HTML-Steuerelement für...
In diesem Artikel wird der spezifische Code von v...
SQL Left Join, Right Join, Inner Join und Natural...
Effektvorschau Klicken Sie rechts auf die Schaltf...
Der erste: Normalbetrieb WÄHLEN SUM(ddd) AS Anzah...
In diesem Artikelbeispiel wird der spezifische Co...
Ich habe ECharts schon einmal bei einem Projekt v...