This is an old revision of the document!


Need to Know

Pentru această secțiune trebuie să vă asigurați că sunteți în directorul potrivit. Rulați comanda

cd ~/uso.git/labs/02-process/support/

Foreground & Background (&, fg, bg, jobs)

Vom folosi ca exemplu programul bg-proc.sh. Acesta afișează în fiecare secundă, alternativ, câte un mesaj Tick! sau Tock!. Pornim programul:

student@uso:~/uso.git/labs/02-process/support$ ./bg-proc.sh 
Tick!
Tock!
Tick!
^C

L-am terminat folosind combinația de taste Ctrl+C.

Îl pornim din nou și de data asta îl oprim folosind combinația de taste Ctrl+Z, ca mai jos.

student@uso:~/uso.git/labs/02-process/support$ ./bg-proc.sh 
Tick!
Tock!
Tick!
^Z
[1]+  Stopped                 ./bg-proc.sh

Apare mesajul Stopped.

Verficăm dacă procesul încă există în sistem:

student@uso:~/uso.git/labs/02-process/support$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.3 160140  7152 ?        Ss   oct08   0:03 /sbin/init splash
root         2  0.0  0.0      0     0 ?        S    oct08   0:00 [kthreadd]
[...]
**student  23597  0.0  0.1  21532  3532 pts/0    T    09:53   0:00 /bin/bash ./bg-proc.sh**
student  23600  0.0  0.0  16116   780 pts/0    T    09:53   0:00 sleep 1
student  23601  0.0  0.1  46012  3784 pts/0    R+   09:53   0:00 ps aux

Pentru a reporni procesul avem 2 variante:

  1. Pornim procesul în fundal (background) folosind comanda bg. Acest lucru înseamnă că noi putem da comenzi, chiar dacă în fundal este un proces care afișează text
  2. Pornim procesul în prim-plan (foreground) folosind comanda fg. Acest lucru înseamnă că procesul oprit anterior a revenit în prim-plan în terminal. Nu vom putea da alte comenzi.
student@uso:~/uso.git/labs/02-process/support$ ./bg-proc.sh
Tick!
Tock!
 
[1]+  Stopped                 ./bg-proc.sh
student@uso:~/uso.git/labs/02-process/support$ bg
[1]+ ./bg-proc.sh &
student@uso:~/uso.git/labs/02-process/support$ Tick!
Tock!
lsTick!
 
batman.sh  bg-proc.sh  it-s-a-trap.sh
student@uso:~/uso.git/labs/02-process/support$ Tock!
Tick!
Tock!
^C
student@uso:~/uso.git/labs/02-process/support$ Tick!
Tock!

Puteți observa mai sus că am încercat să termin programul folosind Ctrl+C. Acest lucru nu a fost posibil pentru că acesta rula în fundal. Pentru aceasta trebuie să aducem procesul în prim-plan și să îl terminăm sau să îi aflăm PID-ul și să-l terminăm folosind utilitarul kill.

Exerciții

  1. Porniți programul bg-proc.sh în background.
  2. Treceți-l în foreground și apoi în foreground.
  3. Terminați procesul folosind combinația Ctrl+C apoi, încă o dată, folosind utilitarul kill.
  4. Faceți același lucru și cu programul it-s-a-trap.sh.

Redirectare

Pentru a redirecta lista proceselor într-un fișier, folosim următoarea comandă:

student@uso:~/uso.git/labs/02-process/support$ ps aux > procese.txt

Un alt exemplu de redirectare este:

student@uso:~/uso.git/labs/02-process/support$ echo "prima linie din fisier" > fis.txt
student@uso:~/uso.git/labs/02-process/support$ cat fis.txt 
prima linie din fisier
student@uso:~/uso.git/labs/02-process/support$ echo "a2a linie din fisier" >> fis.txt 
student@uso:~/uso.git/labs/02-process/support$ cat fis.txt 
prima linie din fisier
a2a linie din fisier
student@uso:~/uso.git/labs/02-process/support$ echo "a3a linie din fisier" > fis.txt 
student@uso:~/uso.git/labs/02-process/support$ cat fis.txt 
a3a linie din fisier

Putem observa că la a3a linie am folosit > în loc de » și am șters conținutul anterior al fișierului.

Comunicare interprocese, folosind |

Putem căuta după un anumit proces din sistem astfel:

student@uso:~/uso.git/labs/02-process/support$ ps aux | grep sleep
student  22406  0.0  0.0  16116   828 pts/0    S    20:28   0:00 sleep 1000
student  22408  0.0  0.0  23076  1084 pts/0    S+   20:28   0:00 grep --color=auto sleep

Care este logica din spatele comenzii? În loc să ne afișeze nouă pe ecran rezultatul comenzii ps aux, acesta a fost transmis către următoarea comandă grep. Comanda din urmă a căutat cuvântul sleep în rezultatul comenzi ps aux.

În exemplul de mai jos

student@uso:~/uso.git/labs/02-process/support$ ls -lR ~/uso.git/ | egrep '*\.c'
-rw-r--r-- 1 student student  72 Oct  9 21:46 hello.c
-rw-r--r-- 1 student student 133 Oct  9 21:46 simple_math.c
-rw-r--r-- 1 student student  72 Oct  9 21:46 hello.c
-rw-r--r-- 1 student student 105 Oct  9 21:46 simple_math.c
-rw-r--r-- 1 student student 198 Oct  9 21:46 constants.c
-rw-r--r-- 1 student student 204 Oct  9 21:46 floats.c
-rw-r--r-- 1 student student 121 Oct  9 21:46 main.c
-rw-r--r-- 1 student student 198 Oct  9 21:46 constants.c
[...]

Am afișat recursiv (-R) directorul ~/uso.git/ și am transmis rezultatul către utilitarul grep pentru a căuta fișierele cu extensia .c.

Exerciții

  1. Afișați recursiv toate fișierele și directoarele din ~/uso.git/, redirectând totul într-un fișier. Înspectați fișierul pentru verificare.
  2. Înlănțuiți comanda precedentă cu grep pentru a căuta în directorul ~/uso.git/ fișierele ce conțin cuvântul lab.
uso/laboratoare/new/02-process/need-to-know.1539182329.txt.gz · Last modified: 2018/10/10 17:38 by razvan.deaconescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0