Pentru această secțiune trebuie să vă asigurați că sunteți în directorul potrivit. Rulați comanda
cd ~/uso-lab/02-process/support/
Vom folosi ca exemplu programul bg-proc.sh. Acesta afișează în fiecare secundă câte un mesaj “Tick” sau “Tock”. Pornim programul:
student@uso:~/.../02-process/support$ ./bg-proc.sh Tick! Tock! Tick! ^C
L-am terminat cu Ctrl+C:
Îl pornim din nou și de data asta îl oprim cu Ctrl+Z. Ce observăm?
student@uso:~/.../02-process/support$ ./bg-proc.sh Tick! Tock! Tick! ^Z [1]+ Stopped ./bg-proc.sh
Verficăm dacă procesul încă există în sistem:
student@uso~/.../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:
student@uso:~/.../02-process/support$ ./bg-proc.sh Tick! Tock! [1]+ Stopped ./bg-proc.sh student@uso:~/.../02-process/support$ bg [1]+ ./bg-proc.sh & student@uso:~/.../02-process/support$ Tick! Tock! lsTick! batman.sh bg-proc.sh it-s-a-trap.sh student@uso:~/.../02-process/support$ Tock! Tick! Tock! ^C student@uso:~/.../02-process/support$ Tick! Tock!
Puteți observa că am încercat să termin programul folosind Ctrl+C. Acest lucru nu a fost posibil pentru că acesta rula în fundal. Pentru asta 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
foreground
și apoi în background.Pentru a redirecta lista proceselor într-un fișier, folosim următoarea comandă:
student@uso:~$ ps aux > procese.txt
Un alt exemplu de redirectare este:
student@uso:~/.../02-process/support$ echo "prima linie din fisier" > fis.txt student@uso:~/.../02-process/support$ cat fis.txt prima linie din fisier student@uso:~/.../02-process/support$ echo "a2a linie din fisier" >> fis.txt student@uso:~/.../02-process/support$ cat fis.txt prima linie din fisier a2a linie din fisier student@uso:~/.../02-process/support$ echo "a3a linie din fisier" > fis.txt student@uso:~/.../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.
Putem căuta după un anumit proces din sistem astfel:
student@uso:~$ 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
.
Exerciții