Home Linux Controllo dei processi in Linux
Controllo dei processi in Linux
Linux
Mercoledì 10 Marzo 2010 17:11

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.

Ultimo aggiornamento Sabato 07 Maggio 2011 16:45
 

Commenti  

 
0 #1 antonio 2010-04-29 09:57
ottima guida
Citazione
 
 
0 #2 fermat 2010-04-29 11:37
grazie!!
Citazione
 

Aggiungi commento