Controllo dei processi in Linux

Mattepuffo's logo
Controllo dei processi in Linux

Controllo dei processi in Linux

Linux ha molti strumenti da terminale per recuperare info sui processi di sistema.

In verità quanto scriverò vale anche per il MAC, ma in generale i MAC users non sono molto terminal oriented.

I programmi presi in considerazione sono: ps, pstree, top, free e uptime

PS

PS da una lista dei processi che sono attivi sul sistema.

Senza altri parametri il comando si limita alla shell corrente:

$ ps

PID TTY          TIME CMD

6981 pts/0    00:00:00 bash

8280 pts/0    00:00:00 ps

Possiamo usare però varie opzioni, tenendo in considerazione che ps riconosce le sintassi UNIX, BSD e GNU.

Io in genere con ps uso le opzioni senza trattini davanti.

Se ci interessa sapere quali sono i nostri processi possiamo usare il parametro x:

$ ps x

PID TTY      STAT   TIME COMMAND
3282 ?        Ssl    0:00 gnome-session
3297 ?        S      0:00 /usr/bin/dbus-launch --sh-syntax --exit-with-session
3298 ?        Ss     0:00 /usr/bin/dbus-daemon --fork --print-pid 7 --print-add
3306 ?        S      0:00 /usr/lib/GConf/gconfd-2
3323 ?        Ssl    0:00 /usr/bin/gnome-settings-daemon
3330 ?        S      0:00 /usr/lib/gvfs/gvfsd
3333 ?        S      0:03 metacity
3338 ?        Ssl    0:00 /usr/lib/gvfs//gvfs-fuse-daemon /home/matte/.gvfs
3343 ?        S      0:00 gnome-panel
3344 ?        S      0:01 nautilus
3346 ?        Ssl    0:00 /usr/lib/bonobo/bonobo-activation-server --ac-activat
3348 ?        S      0:01 nm-applet --sm-disable
3350 ?        S      0:00 gnome-power-manager
3351 ?        S      0:00 /usr/lib/gnome-disk-utility/gdu-notification-daemon
3352 ?        S      0:00 /usr/lib/polkit-gnome/polkit-gnome-authentication-age
3358 ?        Sl     0:13 python /usr/lib/linuxmint/mintMenu/mintMenu.py --oaf-
3362 ?        Ss     0:00 gnome-screensaver
3366 ?        S      0:01 /usr/lib/gnome-panel/wnck-applet --oaf-activate-iid=O
3368 ?        S      0:00 /usr/lib/gnome-panel/clock-applet --oaf-activate-iid=
3369 ?        S      0:00 /usr/lib/gnome-panel/notification-area-applet --oaf-a
3370 ?        S      0:00 /usr/lib/notification-daemon-1.0/notification-daemon
3380 ?        S      0:00 /usr/lib/gvfs/gvfsd-trash --spawner :1.5 /org/gtk/gvf
3382 ?        Sl     0:00 /usr/bin/gnome-keyring-daemon --start --foreground --
3389 ?        S      0:00 /usr/lib/gvfs/gvfs-gdu-volume-monitor
3395 ?        S      0:00 /usr/lib/gvfs/gvfs-gphoto2-volume-monitor
6978 ?        Rl     0:02 gnome-terminal
6979 ?        S      0:00 gnome-pty-helper
6981 pts/0    Ss     0:00 bash
8282 pts/0    R+     0:00 ps x
9526 ?        Sl     1:22 firefox

Dove:

  • PID (Process Identifier) è il numero del processo
  • TTY è terminale/console dove gira il processo; il ? indica che non gira nel terminale
  • STAT è lo status del processo, e può essere S (sleeping), R (running), D (dead) o Z (zombie)
  • TIME
  • COMMAND è il comando completo

Altre opzioni interessanti sono:

  • l che da info su PPID (parent PID) e UID (user identification)
  • u che mostra il proprietario del processo e i cicli di cpu
  • a che mostra una lista dei processi di tutti
  • f mostra i processi in maniera gerarchica in immagine ASCII

PSTREE

Con pstree possiamo vedere i processi in maniera gerarchica.

I processi infatti non sono mai isolati, ma dipendono da altri processi.

Al top troviamo init 1; init è il primo processo che Linux lancia all'avvio.

$ pstree
init─┬─NetworkManager─┬─dhcpcd
│                └─{NetworkManager}
├─SystemToolsBack
├─6*[agetty]
├─bonobo-activati───{bonobo-activat}
├─clock-applet
├─console-kit-dae───63*[{console-kit-da}]
├─crond
├─2*[dbus-daemon]
├─dbus-launch
├─devkit-disks-da───devkit-disks-da
├─devkit-power-da
├─gconfd-2
├─gdm-binary───gdm-simple-slav─┬─Xorg
│                              └─gdm-session-wor───gnome-session─┬─gdu-not+
│                                                                ├─gnome-p+
│                                                                ├─gnome-p+
│                                                                ├─metacit+
│                                                                ├─nautilu+
│                                                                ├─nm-appl+
│                                                                ├─polkit-+
│                                                                └─{gnome-+
├─gnome-keyring-d───2*[{gnome-keyring-}]
├─gnome-screensav
├─gnome-settings-───{gnome-settings}
├─gvfs-fuse-daemo───3*[{gvfs-fuse-daem}]
├─gvfs-gdu-volume
├─gvfs-gphoto2-vo
├─gvfsd
├─gvfsd-trash
├─hald───hald-runner─┬─hald-addon-acpi
│                    ├─hald-addon-gene
│                    ├─hald-addon-inpu
│                    ├─hald-addon-leds
│                    └─hald-addon-rfki
├─mintmenu─┬─firefox───9*[{firefox}]
│          ├─gnome-terminal─┬─bash───pstree
│          │                ├─gnome-pty-helpe
│          │                └─{gnome-terminal}
│          └─{mintmenu}
├─modem-manager
├─notification-ar
├─notification-da
├─polkitd
├─syslog-ng───syslog-ng
├─system-tools-ba
├─udevd───2*[udevd]
├─wnck-applet
└─wpa_supplicant

Alcune opzioni interessanti sono:

  • a mostra i parametri con i quali vengono eseguiti i processi
  • h distingue tra i nostri processi e gli ancestors (tipo init)
  • p mostra il PID
  • u mostra l'user

TOP

Questo comando, al contrario di ps, è dinamico, nel senso che non da uno "scatto" di com'è lo stato ma si aggiorna di continuo.

Top ci da molte info sul sistema e sui processi attivi.

Le prime righe ci da info sul tempo, sull'uptime, il numero di processi, lo status e info su memoria, swap e cpu.

Cliccando su F possiamo dire a top cosa vogliamo vedere di preciso.

Inoltre, come forse avete capito, top è interattivo; ad esempio cliccando su H vedrete l'online help; cliccando su U seguito dallo username vederete i processi di quell'utente; Shift+R inverte l'output; Q esce da top; Shift+Z serve per aggiungere i colori; ecc.

Per top se volete potete trovare anche delle gui come gtop (scritto in gtk) e htop (che è grafico per modo di dire).

FREE

Questo comando serve per vedere la RAM occupata/libera.

Usate lo switch -m per vedere le misure in megabyte.

$ free -m

                   total       used       free     shared    buffers     cached
Mem:          2024       1910        113          0        145       1380
-/+ buffers/cache:        385       1639
Swap:         1019          0       1019

Free è molto affidabile in quanto legge i dati esposti dal kernel in /proc/meminfo.

Con l'opzione -t potete vedere anche i totali.

Da tenere presente la voce used è formata da quella usata dai processi+buffer+cached.

UPTIME

In genere questo comando è usato per vedere da quanto tempo il pc è in esecuzione.

L'output addizionale mostra il tempo corrente, quanti users sono loggati e il carico di sistema.

$ uptime

11:50:21 up 2 days,  1:03,  2 users,  load average: 0.11, 0.11, 0.17

KILL

Al contrario di quello che può sembrare dal nome, kill serve "solo" per mandare messaggi segnali ai processi.

Per usare alcuni segnali bisogna essere root.

Con kill -l possiamo vedere la lista di tutti i segnali che possiamo inviare.

I più usati sono:

  • SIGHUP dice al processo di fare un restart immediatamente dopo essersi terminato
  • SIGTERM è una richiesta di clean up
  • SIGKILL forza un processo a terminarsi
  • SIGSTOP interrompe un processo fino a che non invii il segnale SIGCONT di continuare

Per mandare un segnale si può sia scrivere il nome del segnale che il numero (che puoi trovare attraverso kill -l) seguito dall'ID del processo che ci interessa:

# kill -19 9201 è uguale a

# kill SIGSTOP 9201

Per trovare l'ID esatto possiamo usare ps come descritto prima, magari con l'aiuto di grep:

$ ps aux | grep ssh

KILLER COMMAND

Il comando killall supporta gli stessi segnali di kill, ma al posto dell'ID serve il nome del processo.

Senza spcificare il segnale killall usa il -15 (-TERM).

Ad esempio:

# killall -15 bash

terminerà tutte le istanze di bash, inclusa la shell usata per inviare il comando.

Quindi attenzione a come si usa killall.

Possiamo anche attivare la modalità interattiva tramite killall -i.

BACKGROUND & FOREGROUND

Alcune volte lanciamo programmi da terminale che poi useremo a lungo; e in più i programmi grafici bloccano la shell.

In questi casi possiamo mettere tali programmi in background, sia dall'inizio che in un secodno momento.

Per metterlo in background all'avvio aggiungiamo il simbolo & alla fine del comando:

$ gimp &

[1] 4507

Sotto il comando viene mostrato l'ID e poi la bash è in grado di accettare altri comandi.

Attraverso il comando jobs possiamo vedere che jobs sono attivi nella shell corrente.

Il job Id è utile anche quando vogliamo muovere un programma in background attraverso Ctrl+Z:

^Z

[3]+ Stopped gimp

Se adesso scriviamo bg il processo continuerà in background.

NOHUP

Attraverso nohup facciamo in modo che il processo continui anche dop la chisura della shell:

$ nohup sleep 2000 &

[5] 4487

nohup: ignoring input and appending output to 'nohup.out'

PGREP

Con questo comando velociziamo la ricerca dei processi.

Infatti basta usare pgrep nome_comando

$ pregp ssh

1451

1720

4570

per trovare tutti gli ID di quel processo.


Condividi

Commentami!