Linux: Gestione dei Processi (Attivi, In Esecuzione, In Corso)

Stato
Discussione chiusa ad ulteriori risposte.
N

Nhoya

Ultima modifica da un moderatore:
La gestione dei processi all'interno dei sistemi Linux è basata sul modello gerarchico che ne facilita la gesione. Le parole chiave per questa struttura sono: Processo padre e Processo figlio

Chiameremo Padre il processo che genera altri processi e Figlio il processo generato dal padre.

Oggi parleremo in particolare di:

  • pstree
  • ps
  • top
  • I segnali, kill, pkill, killall e pgrep

--Intro
Iniziamo dando uno sguardo a cosa succede all'interno del nostro sistema
Codice:
pstree
Avremo un output simile a questo
Codice:
nhoya@box:/$ pstree
init─┬─Thunar
     ├─acpid
     ├─atd
     ├─atieventsd───sh───authatieventsd.
     ├─avahi-daemon───avahi-daemon
     ├─colord───{colord}
     ├─colord-sane───2*[{colord-sane}]
     ├─console-kit-dae───64*[{console-kit-dae}]
     ├─cron
     ├─cupsd─┬─epson_inkjet_pr
     │       ├─gstoraster───gs
     │       └─usb
     ├─2*[dbus-daemon]
     ├─dbus-launch
     ├─2*[dhclient]
     ├─gconfd-2
     ├─gdomap
     ├─5*[getty]
     ├─gpg-agent
     ├─gvfsd
     ├─gvfsd-metadata
     ├─login───bash───startx───xinit─┬─Xorg
     │                               └─ck-launch-sessi─┬─sh─┬─xfce4-session─┬─g+
     │                                                 │    │               └─{+
     │                                                 │    └─xscreensaver
     │                                                 └─ssh-agent
     ├─lpd
     ├─polkit-gnome-au───{polkit-gnome-au}
     ├─polkitd───{polkitd}
     ├─pulseaudio───4*[{pulseau*****]
     ├─pulseaudio─┬─gconf-helper
     │            └─4*[{pulseau*****]
     ├─rsyslogd───3*[{rsyslogd}]
     ├─rtkit-daemon───2*[{rtkit-daemon}]
     ├─sshd
     ├─teamviewerd───15*[{teamviewerd}]
     ├─tor
     ├─udevd───2*[udevd]
     ├─upowerd───2*[{upowerd}]
     ├─wicd───wicd-monitor
     ├─wicd-client
     ├─xfce4-panel─┬─iceweasel───49*[{iceweasel}]
     │             ├─panel-15-dateti
     │             ├─panel-6-systray
     │             ├─xfce4-mixer-plu───9*[{xfce4-mixer-plu}]
     │             └─{xfce4-panel}
     ├─xfce4-power-man───{xfce4-power-man}
     ├─xfce4-settings-
     ├─xfce4-terminal─┬─bash───pstree
     │                ├─gnome-pty-helpe
     │                └─{xfce4-terminal}
     ├─xfce4-volumed───10*[{xfce4-volumed}]
     ├─xfconfd
     ├─xfdesktop
     ├─xfsettingsd
     └─xfwm4
Possiamo analizzare come, andando da sinistra verso destra, avremo il processo padre e quello figlio secondo una struttura ad albero
Il primo processo che il kernel manda in esecuzione subito dopo il bootstrap è init. Esso viene definito "il processo padre" e non a caso il suo PID e' 1. Esso si occupa di lanciare tutti gli atri processi e di adottare i processi orfani (il cui padre è stato terminato)
Avremo quindi una sequenza simile a questa
Codice:
kernel > init > processi

Parlando di processi è bene sempre ricordare che:

  1. ogni processo è associato un utente che lo ha lanciato ed uno che ne detiene la gestione (possono coincidere)
  2. posseggono una directory di riferimento
  3. ogni processo è in grado di ricevere e inviare diversi tipi di segnali che innescheranno in esso una reazione
  4. ogni processo può essere associato ad un terminale


Fondamentale per quanto riguarda la gestione dei processi è la funzione di /proc
Codice:
nhoya@box:~$ ls -lah /proc
totale 4,0K
dr-xr-xr-x 153 root       root          0 dic 16 16:02 .
drwxr-xr-x  25 root       root       4,0K dic  9 18:08 ..
dr-xr-xr-x   8 root       root          0 dic 16 16:03 1
dr-xr-xr-x   8 root       root          0 dic 16 16:03 10
dr-xr-xr-x   8 root       root          0 dic 16 16:03 11
dr-xr-xr-x   8 root       root          0 dic 16 16:03 1113
dr-xr-xr-x   8 root       root          0 dic 16 16:03 1144
dr-xr-xr-x   8 root       root          0 dic 16 16:03 1169
dr-xr-xr-x   8 root       root          0 dic 16 16:03 1170
dr-xr-xr-x   8 root       root          0 dic 16 16:03 1171
dr-xr-xr-x   8 root       root          0 dic 16 16:03 12
dr-xr-xr-x   8 root       root          0 dic 16 16:03 13
dr-xr-xr-x   8 root       root          0 dic 16 16:03 137
dr-xr-xr-x   8 root       root          0 dic 16 16:03 138
dr-xr-xr-x   8 root       root          0 dic 16 16:03 15
dr-xr-xr-x   8 root       root          0 dic 16 16:03 157
dr-xr-xr-x   8 root       root          0 dic 16 16:03 16
dr-xr-xr-x   8 root       root          0 dic 16 16:03 17
dr-xr-xr-x   8 root       root          0 dic 16 16:03 177
dr-xr-xr-x   8 root       root          0 dic 16 16:03 181
dr-xr-xr-x   8 root       root          0 dic 16 16:03 1886
dr-xr-xr-x   8 root       root          0 dic 16 16:03 1887
dr-xr-xr-x   8 root       root          0 dic 16 16:03 19
dr-xr-xr-x   8 root       root          0 dic 16 16:03 2
dr-xr-xr-x   8 root       root          0 dic 16 16:03 20
dr-xr-xr-x   8 root       root          0 dic 16 16:03 204
dr-xr-xr-x   8 root       root          0 dic 16 16:03 21
dr-xr-xr-x   8 root       root          0 dic 16 16:03 2153
dr-xr-xr-x   8 root       root          0 dic 16 16:03 2165
dr-xr-xr-x   8 root       root          0 dic 16 16:03 22
dr-xr-xr-x   8 root       root          0 dic 16 16:03 23
dr-xr-xr-x   8 root       root          0 dic 16 16:03 24
dr-xr-xr-x   8 root       root          0 dic 16 16:03 25
dr-xr-xr-x   8 root       root          0 dic 16 16:03 2509
dr-xr-xr-x   8 nobody     nogroup       0 dic 16 16:03 2564
dr-xr-xr-x   8 daemon     daemon        0 dic 16 16:03 2587
dr-xr-xr-x   8 root       root          0 dic 16 16:03 26
dr-xr-xr-x   8 lp         lp            0 dic 16 16:03 2610
dr-xr-xr-x   8 root       root          0 dic 16 16:03 2629
dr-xr-xr-x   8 root       root          0 dic 16 16:03 2647
dr-xr-xr-x   8 root       root          0 dic 16 16:03 2657
dr-xr-xr-x   8 messagebus messagebus    0 dic 16 16:03 2683
dr-xr-xr-x   8 root       root          0 dic 16 16:03 27
dr-xr-xr-x   8 root       root          0 dic 16 16:03 272
dr-xr-xr-x   8 root       root          0 dic 16 16:03 273
dr-xr-xr-x   8 avahi      avahi         0 dic 16 16:03 2754
dr-xr-xr-x   8 avahi      avahi         0 dic 16 16:03 2755
dr-xr-xr-x   8 root       root          0 dic 16 16:03 28
dr-xr-xr-x   8 pulse      pulse         0 dic 16 16:03 2806
dr-xr-xr-x   8 root       root          0 dic 16 16:03 2825
dr-xr-xr-x   8 root       root          0 dic 16 16:03 2828
dr-xr-xr-x   8 root       root          0 dic 16 16:03 2834
dr-xr-xr-x   8 colord     colord        0 dic 16 16:03 2857
dr-xr-xr-x   8 colord     colord        0 dic 16 16:03 2861
dr-xr-xr-x   8 lp         lp            0 dic 16 16:03 2869
dr-xr-xr-x   8 lp         lp            0 dic 16 16:03 2870
dr-xr-xr-x   8 root       lp            0 dic 16 16:03 2871
dr-xr-xr-x   8 root       root          0 dic 16 16:03 2889
dr-xr-xr-x   8 root       root          0 dic 16 16:03 29
dr-xr-xr-x   8 root       nhoya         0 dic 16 16:03 2919
dr-xr-xr-x   8 root       root          0 dic 16 16:03 2920
dr-xr-xr-x   8 root       root          0 dic 16 16:03 2921
dr-xr-xr-x   8 root       root          0 dic 16 16:03 2922
dr-xr-xr-x   8 root       root          0 dic 16 16:03 2923
dr-xr-xr-x   8 root       root          0 dic 16 16:03 2924
dr-xr-xr-x   8 lp         lp            0 dic 16 16:03 2926
dr-xr-xr-x   8 root       root          0 dic 16 16:03 2929
dr-xr-xr-x   8 root       root          0 dic 16 16:03 2939
dr-xr-xr-x   8 root       root          0 dic 16 16:03 3
dr-xr-xr-x   8 root       root          0 dic 16 16:03 30
dr-xr-xr-x   8 root       root          0 dic 16 16:03 3006
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3016
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3021
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3039
dr-xr-xr-x   8 root       root          0 dic 16 16:03 3040
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3066
dr-xr-xr-x   8 root       root          0 dic 16 16:03 31
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3114
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3123
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3126
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3127
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3135
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3139
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3143
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3145
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3169
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3190
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3192
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3194
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3196
dr-xr-xr-x   8 root       root          0 dic 16 16:03 32
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3201
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3205
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3230
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3233
dr-xr-xr-x   8 rtkit      rtkit         0 dic 16 16:03 3235
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3261
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3262
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3264
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3280
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3292
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3294
dr-xr-xr-x   8 root       root          0 dic 16 16:03 33
dr-xr-xr-x   8 root       root          0 dic 16 16:03 3315
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3379
dr-xr-xr-x   8 root       root          0 dic 16 16:03 34
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3406
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3429
dr-xr-xr-x   8 root       root          0 dic 16 16:03 35
dr-xr-xr-x   8 nhoya      utmp          0 dic 16 16:03 3522
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:03 3534
dr-xr-xr-x   8 root       root          0 dic 16 16:03 38
dr-xr-xr-x   8 root       root          0 dic 16 16:03 3849
dr-xr-xr-x   8 root       root          0 dic 16 16:04 3911
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:04 4132
dr-xr-xr-x   8 root       root          0 dic 16 16:04 4134
dr-xr-xr-x   8 root       root          0 dic 16 16:04 4135
dr-xr-xr-x   8 root       root          0 dic 16 16:03 420
dr-xr-xr-x   8 root       root          0 dic 16 16:04 4239
dr-xr-xr-x   8 root       root          0 dic 16 16:04 4240
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:05 4306
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:05 4308
dr-xr-xr-x   8 root       root          0 dic 16 16:29 4533
dr-xr-xr-x   8 root       root          0 dic 16 16:29 4601
dr-xr-xr-x   8 root       root          0 dic 16 16:29 4637
dr-xr-xr-x   8 root       root          0 dic 16 16:29 4726
dr-xr-xr-x   8 root       root          0 dic 16 16:29 4740
dr-xr-xr-x   8 root       root          0 dic 16 16:29 4766
dr-xr-xr-x   8 root       root          0 dic 16 16:29 4812
dr-xr-xr-x   8 root       root          0 dic 16 16:29 4815
dr-xr-xr-x   8 root       root          0 dic 16 16:29 4827
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:31 4881
dr-xr-xr-x   8 root       root          0 dic 16 16:31 5080
dr-xr-xr-x   8 nhoya      nhoya         0 dic 16 16:31 5095
dr-xr-xr-x   8 root       root          0 dic 16 16:03 6
dr-xr-xr-x   8 root       root          0 dic 16 16:03 625
dr-xr-xr-x   8 root       root          0 dic 16 16:03 633
dr-xr-xr-x   8 root       root          0 dic 16 16:03 657
dr-xr-xr-x   8 root       root          0 dic 16 16:03 7
dr-xr-xr-x   8 root       root          0 dic 16 16:03 711
dr-xr-xr-x   8 root       root          0 dic 16 16:03 744
dr-xr-xr-x   8 root       root          0 dic 16 16:03 758
dr-xr-xr-x   8 root       root          0 dic 16 16:03 8
dr-xr-xr-x   3 root       root          0 dic 16 16:31 acpi
dr-xr-xr-x   7 root       root          0 dic 16 16:31 asound
dr-xr-xr-x   3 root       root          0 dic 16 16:31 ati
-r--r--r--   1 root       root          0 dic 16 16:31 buddyinfo
dr-xr-xr-x   5 root       root          0 dic 16 16:31 bus
-r--r--r--   1 root       root          0 dic 16 16:31 cgroups
-r--r--r--   1 root       root          0 dic 16 16:31 cmdline
-r--r--r--   1 root       root          0 dic 16 16:31 consoles
-r--r--r--   1 root       root          0 dic 16 16:31 cpuinfo
-r--r--r--   1 root       root          0 dic 16 16:31 crypto
-r--r--r--   1 root       root          0 dic 16 16:31 devices
-r--r--r--   1 root       root          0 dic 16 16:31 diskstats
-r--r--r--   1 root       root          0 dic 16 16:31 dma
dr-xr-xr-x   2 root       root          0 dic 16 16:31 driver
-r--r--r--   1 root       root          0 dic 16 16:31 execdomains
-r--r--r--   1 root       root          0 dic 16 16:31 fb
-r--r--r--   1 root       root          0 dic 16 16:31 filesystems
dr-xr-xr-x   5 root       root          0 dic 16 16:31 fs
-r--r--r--   1 root       root          0 dic 16 16:03 interrupts
-r--r--r--   1 root       root          0 dic 16 16:31 iomem
-r--r--r--   1 root       root          0 dic 16 16:31 ioports
dr-xr-xr-x  33 root       root          0 dic 16 16:31 irq
-r--r--r--   1 root       root          0 dic 16 16:31 kallsyms
-r--------   1 root       root       128T dic 16 16:31 kcore
-r--r--r--   1 root       root          0 dic 16 16:31 keys
-r--r--r--   1 root       root          0 dic 16 16:31 key-users
-r--------   1 root       root          0 dic 16 16:03 kmsg
-r--------   1 root       root          0 dic 16 16:31 kpagecount
-r--------   1 root       root          0 dic 16 16:31 kpageflags
-r--r--r--   1 root       root          0 dic 16 16:31 loadavg
-r--r--r--   1 root       root          0 dic 16 16:31 locks
-r--r--r--   1 root       root          0 dic 16 16:31 meminfo
-r--r--r--   1 root       root          0 dic 16 16:31 misc
-r--r--r--   1 root       root          0 dic 16 16:31 modules
lrwxrwxrwx   1 root       root         11 dic 16 16:31 mounts -> self/mounts
-rw-r--r--   1 root       root          0 dic 16 16:03 mtrr
lrwxrwxrwx   1 root       root          8 dic 16 16:31 net -> self/net
-r--r--r--   1 root       root          0 dic 16 16:31 pagetypeinfo
-r--r--r--   1 root       root          0 dic 16 16:31 partitions
-r--r--r--   1 root       root          0 dic 16 16:31 sched_debug
lrwxrwxrwx   1 root       root         64 dic 16 16:02 self -> 5095
-rw-------   1 root       root          0 dic 16 16:31 slabinfo
-r--r--r--   1 root       root          0 dic 16 16:31 softirqs
-r--r--r--   1 root       root          0 dic 16 16:31 stat
-r--r--r--   1 root       root          0 dic 16 16:31 swaps
dr-xr-xr-x   1 root       root          0 dic 16 16:02 sys
--w-------   1 root       root          0 dic 16 16:31 sysrq-trigger
dr-xr-xr-x   2 root       root          0 dic 16 16:31 sysvipc
-r--r--r--   1 root       root          0 dic 16 16:31 timer_list
-rw-r--r--   1 root       root          0 dic 16 16:31 timer_stats
dr-xr-xr-x   4 root       root          0 dic 16 16:31 tty
-r--r--r--   1 root       root          0 dic 16 16:31 uptime
-r--r--r--   1 root       root          0 dic 16 16:31 version
-r--------   1 root       root          0 dic 16 16:31 vmallocinfo
-r--r--r--   1 root       root          0 dic 16 16:31 vmstat
-r--r--r--   1 root       root          0 dic 16 16:31 zoneinfo
esso funge da filesystem virtuale e contiene la maggior parte delle utility di sistema, file relativi al runitime, informazioni sui processi e valori relativi al kernel (ne parleremo meglio in un'altra guida)


--ps
Dopo aver fatto una piccola introduzione alla struttura gerarchica dei processi passiamo a vedere come gestire interfacciarci con i processi attivi sul nostro terminale.

Digitiando
Codice:
ps
verrà stampata una lista statica dei processi attivi su quel terminale (verrà mostrato cioè cosa succede solo nel preciso istante in cui avviamo il comando)

Codice:
nhoya@box:/$ ps
  PID TTY          TIME CMD
9774 pts/1    00:00:00 bash
10113 pts/1    00:00:00 ps
In questo caso avremo bash che è la shell e ps che è il comando appena eseguito
Possiamo notare inoltre che vengono date altre informazioni suddivise in colonne
ovvero:

  • PID: mostra l'ID del processo*
  • TTY: indica il terminale di controllo al quale è associato (da non confondere con l'emulatore di terminale)
  • TIME: mostra il tempo di CPU
  • CMD: indica il comando relativo a quel processo


N.B.
Nel caso in cui avessimo avuto necessità di avere il PID di un singolo processo a partire dal nome avremmo potuto utilizzare
Codice:
$ pidof nomeprocesso

Vediamo adesso come poter combinare le varie opzioni del comando ps per avere maggiori informazioni sui processi:

Digitiamo il comando
Codice:
ps -axf
che non è altro che la combinazione delle opzioni

  • a: permette di listare tutti i processi (anche quelli avviati da altri utenti
  • f: mostra la gerarchia dei processi
  • x: mostra i processi relativi al server x


Apparirà su schermo una cosa simile:
Codice:
PID TTY      STAT   TIME COMMAND
    2 ?        S      0:00 [kthreadd]
    3 ?        S      0:00  \_ [ksoftirqd/0]
    4 ?        S      0:00  \_ [kworker/0:0]
    6 ?        S      0:00  \_ [migration/0]
    7 ?        S      0:00  \_ [watchdog/0]
    8 ?        S      0:00  \_ [migration/1]
   10 ?        S      0:00  \_ [ksoftirqd/1]
   11 ?        S      0:00  \_ [kworker/0:1]
   12 ?        S      0:00  \_ [watchdog/1]
   13 ?        S      0:00  \_ [migration/2]
   15 ?        S      0:00  \_ [ksoftirqd/2]
   16 ?        S      0:00  \_ [watchdog/2]
   17 ?        S      0:00  \_ [migration/3]
   19 ?        S      0:00  \_ [ksoftirqd/3]
   20 ?        S      0:00  \_ [watchdog/3]
   21 ?        S<     0:00  \_ [cpuset]
   22 ?        S<     0:00  \_ [khelper]
   23 ?        S      0:00  \_ [kdevtmpfs]
   24 ?        S<     0:00  \_ [netns]
   25 ?        S      0:00  \_ [sync_supers]
   26 ?        S      0:00  \_ [bdi-default]
   27 ?        S<     0:00  \_ [kintegrityd]
   28 ?        S<     0:00  \_ [kblockd]
   29 ?        S      0:00  \_ [khungtaskd]
   30 ?        S      0:00  \_ [kswapd0]
   31 ?        SN     0:00  \_ [ksmd]
   32 ?        SN     0:00  \_ [khugepaged]
   33 ?        S      0:00  \_ [fsnotify_mark]
   34 ?        S<     0:00  \_ [crypto]
   37 ?        S      0:01  \_ [kworker/3:1]
   38 ?        S      0:00  \_ [kworker/2:1]
   40 ?        S      0:00  \_ [kworker/1:2]
  132 ?        S      0:00  \_ [khubd]
  141 ?        S      0:00  \_ [kworker/u:1]
  156 ?        S<     0:00  \_ [ata_sff]
  180 ?        S      0:00  \_ [scsi_eh_0]
  181 ?        S      0:00  \_ [scsi_eh_1]
  198 ?        S      0:00  \_ [kworker/u:2]
  266 ?        S      0:00  \_ [jbd2/sda2-8]
  267 ?        S<     0:00  \_ [ext4-dio-unwrit]
  659 ?        S      0:01  \_ [kworker/3:2]
  660 ?        S      0:00  \_ [kworker/2:2]
  665 ?        S<     0:00  \_ [led_workqueue]
  666 ?        S<     0:00  \_ [cfg80211]
  678 ?        S<     0:00  \_ [kpsmoused]
  738 ?        S<     0:00  \_ [hd-audio0]
  751 ?        S<     0:00  \_ [hd-audio2]
  764 ?        S<     0:00  \_ [hci0]
1135 ?        S      0:00  \_ [flush-8:0]
1178 ?        S<     0:00  \_ [kdmflush]
1180 ?        S<     0:00  \_ [kcryptd_io]
1181 ?        S<     0:00  \_ [kcryptd]
1896 ?        S      0:00  \_ [jbd2/dm-0-8]
1897 ?        S<     0:00  \_ [ext4-dio-unwrit]
2169 ?        S      0:00  \_ [flush-254:0]
3097 ?        S      0:00  \_ [kworker/1:3]
4445 ?        S      0:00  \_ [kworker/3:3]
4521 ?        S      0:00  \_ [kworker/2:3]
4546 ?        S      0:00  \_ [kworker/0:3]
4615 ?        S      0:00  \_ [kworker/1:0]
4675 ?        S      0:00  \_ [kworker/0:2]
    1 ?        Ss     0:01 init [2] 
  414 ?        Ss     0:00 udevd --daemon
2873 ?        S      0:00  \_ udevd --daemon
2875 ?        S      0:00  \_ udevd --daemon
2181 ?        Ss     0:00 dhclient -v -pf /run/dhclient.eth0.pid -lf /var/lib/d
2556 ?        Sl     0:00 /usr/sbin/rsyslogd -c5
2630 ?        Ss     0:00 /usr/bin/gdomap -I /var/run/gdomap.pid -p
2631 ?        Ss     0:00 /usr/sbin/acpid
2642 ?        Ss     0:00 /usr/sbin/lpd -s
2650 ?        Ss     0:00 /usr/sbin/atd
2686 ?        Ss     0:00 /usr/sbin/atieventsd
4372 ?        S      0:00  \_ sh -c /etc/ati/authatieventsd.sh grant :0 /.Xauth
4373 ?        S      0:00      \_ /bin/sh /etc/ati/authatieventsd.sh grant :0 /
2701 ?        Ss     0:00 /usr/sbin/cron
2722 ?        Ss     0:00 /usr/bin/dbus-daemon --system
2804 ?        S      0:00 avahi-daemon: running [box.local]
2806 ?        S      0:00  \_ avahi-daemon: chroot helper
2845 ?        S<l    0:00 /usr/bin/pulseaudio --system --disallow-exit --disall
2885 ?        S      0:03 /usr/bin/tor --defaults-torrc /usr/share/tor/tor-serv
2898 ?        Ss     0:00 /usr/sbin/cupsd -C /etc/cups/cupsd.conf
2935 ?        S      0:00  \_ Epson_Stylus_SX130 3 anonymous Test Page 1 job-uu
3059 ?        S      0:01  |   \_ /usr/bin/gs -dQUIET -dPARANOIDSAFER -dNOPAUSE
2936 ?        S      0:00  \_ Epson_Stylus_SX130 3 anonymous Test Page 1 job-uu
2938 ?        S      0:00  \_ usb://EPSON/Stylus%20SX130?serial=NBLZ041061%20%2
2904 ?        Sl     0:00 /usr/lib/x86_64-linux-gnu/colord/colord
2929 ?        Sl     0:00 /usr/lib/x86_64-linux-gnu/colord/colord-sane
2957 ?        S      0:01 /usr/bin/python -O /usr/share/wicd/daemon/wicd-daemon
3095 ?        S      0:00  \_ /usr/bin/python -O /usr/share/wicd/daemon/monitor
2986 ?        Sl     0:00 /usr/sbin/console-kit-daemon --no-daemon
3058 ?        Sl     0:00 /usr/lib/policykit-1/polkitd --no-debug
3071 ?        Sl     0:01 /opt/teamviewer/tv_bin/teamviewerd -d
3074 tty1     Ss     0:00 /bin/login --     
3113 tty1     S      0:00  \_ -bash
3118 tty1     S+     0:00      \_ /bin/sh /usr/bin/startx
3135 tty1     S+     0:00          \_ xinit /etc/X11/xinit/xinitrc -- /etc/X11/
3136 tty7     Ss+    1:25              \_ /usr/bin/X -nolisten tcp :0 -auth /tm
3163 tty1     S      0:00              \_ /usr/bin/ck-launch-session /usr/bin/d
3211 ?        Ss     0:00                  \_ /usr/bin/ssh-agent /usr/bin/ck-la
3220 tty1     S      0:00                  \_ /bin/sh /etc/xdg/xfce4/xinitrc --
3259 tty1     S      0:00                      \_ xscreensaver -no-splash
3261 tty1     Sl     0:00                      \_ xfce4-session
3359 tty1     Sl     0:00                          \_ /usr/bin/python /usr/bin/
3545 tty1     S      0:00                              \_ gnome-pty-helper
3546 pts/0    Ss+    0:00                              \_ /bin/bash
3750 pts/0    S      0:00                                  \_ /bin/bash
3751 pts/0    S      0:00                                      \_ /bin/bash ./t
3754 pts/0    Sl     2:55                                          \_ ./ts3clie
3075 tty2     Ss+    0:00 /sbin/getty 38400 tty2
3076 tty3     Ss+    0:00 /sbin/getty 38400 tty3
3077 tty4     Ss+    0:00 /sbin/getty 38400 tty4
3078 tty5     Ss+    0:00 /sbin/getty 38400 tty5
3079 tty6     Ss+    0:00 /sbin/getty 38400 tty6
3223 tty1     S      0:00 /usr/bin/dbus-launch --exit-with-session x-session-ma
3224 ?        Ss     0:00 /usr/bin/dbus-daemon --fork --print-pid 5 --print-add
3232 ?        S      0:00 /usr/lib/xfce4/xfconf/xfconfd
3255 ?        Ss     0:00 gpg-agent --daemon --write-env-file /home/nhoya/.cach
3286 tty1     S      0:00 xfwm4
3287 tty1     S      0:00 xfsettingsd --force
3289 tty1     Sl     0:02 xfce4-panel
3437 tty1     S      0:00  \_ /usr/lib/x86_64-linux-gnu/xfce4/panel/wrapper /us
3443 tty1     S      0:00  \_ /usr/lib/x86_64-linux-gnu/xfce4/panel/wrapper /us
3471 tty1     Sl     0:00  \_ /usr/lib/x86_64-linux-gnu/xfce4/panel-plugins/xfc
4398 tty1     Sl     5:33  \_ iceweasel
3291 tty1     S      0:00 Thunar --daemon
3293 tty1     S      0:00 xfdesktop
3297 ?        S      0:00 /usr/lib/gvfs/gvfsd
3312 tty1     Sl     0:00 /usr/lib/policykit-1-gnome/polkit-gnome-authenticatio
3326 tty1     S      0:00 /usr/bin/python -O /usr/share/wicd/gtk/wicd-client.py
3330 ?        S<l    1:38 /usr/bin/pulseaudio --start
3409 ?        S      0:00  \_ /usr/lib/pulseaudio/pulse/gconf-helper
3332 ?        SNl    0:00 /usr/lib/rtkit/rtkit-daemon
3356 ?        Ssl    0:00 xfce4-volumed
3364 ?        Ssl    0:00 xfce4-power-manager
3372 tty1     S      0:00 xfce4-settings-helper
3413 ?        Sl     0:00 /usr/lib/upower/upowerd
3418 ?        S      0:00 /usr/lib/x86_64-linux-gnu/gconf/gconfd-2
3938 ?        Ss     0:00 dhclient -v -pf /run/dhclient.wlan0.pid -lf /var/lib/
4000 ?        Ss     0:00 /usr/sbin/sshd
4705 tty1     Sl     0:00 xfce4-terminal
4706 tty1     S      0:00  \_ gnome-pty-helper
4707 pts/1    Ss     0:00  \_ bash
4713 pts/1    R+     0:00      \_ ps axf


03fig04.gif




Possiamo notare come alle colonne elencate prima si affianca quella indicata come STATE che ci permette di visualizzare lo status del processo, questo perchè non è detto che se un processo è attivo esso sia realmente in esecuzione.
Esistono infatti diversi status che elencherò qui sotto:



  • D sleep (non terminabile)
  • R avviato
  • S sleep (in attesa di un evento)
  • T processo terminato
  • X processo morto
  • W (solitamente associato ad un processo con un nome tra parentesi) ne indica il PID particolarmente basso e il fatto che sino stati avviati NON da init ma direttamente dal kernel
  • Z processo zombie


A queste opzioni se ne possono aggiungere altre tipiche dei sistemi BSD che ne specificano ancor di più lo stato. Esse sono:



  • < alta priorità
  • N bassa priorità
  • L presenza di pagine di memoria bloccate
  • s processo che sta a capo della sessione
  • l multi-thread
  • + processo in primo piano


Lo status viene associato a un processo mediante una syscall invocata dal padre.
Lo status zombie è parecchio particolare infatti si verifica solo quando il processo figlio è terminato ma al processo padre non ariva alcun segnale da parte del figlio.
A tutti gli effetti è cosiderato come un processo terminato quindi non occuperà memoria e ovviamente sarà impossibile terminarlo (in quanto lo è già) ma verrà comunque listato nell'albero dei processi
Ecco uno script che termina gli zombie:
Codice:
                 #!/bin/bash
#inforge.net#
        cerca=`ps aux |grep [d]efu`
if ((${#cerca} > 0));then #se cerca da più di 0 risultati, allora
        echo Zombie trovati:
        echo $(ps aux |grep [d]efu|awk '{print$11}') #lista gli zombie
echo  "Vuoi Terminarli? [y/n/h] "
read input #legge l'input e lo chiama input (ho molta fantasia..)
#caso y
        case $input in
        ""| [Yy])  kill -9 $(ps -f $(ps aux |grep [d]efu |awk '{print$2}'|grep -v "PID" |xargs -n 1 )|awk '{print$3}'|grep -v "PPID"|xargs -n 1)   #nel caso in cui l'input sia y o Y allora cerca il processo padre del processo zombie e lo termina
        esac
#caso n
        case $input in
        ""|[Nn]) exit 0 #nel caso in cui la risposta sia 0 allora termina lo script
        esac
#caso y
        case $input in
        ""| [Hh])  echo "i  processi zombie sono processi terminati di cui il padre non ha ancora  ricevuto la syscall che ne determina la scomparsa dall'albero dei  processi. Possono essere eliminati o reboottando o killando il processo  padre. Leggi di più su inforge.net"
        esac
else

        echo Nessuno Zomibie trovato
fi
        exit 0 #se non trova nulla  termina lo script
trovate l'originale non comentato qui: http://l33tspace.altervista.org/repo/zombie_process_killer/zombie_process_killer

Le opzioni di ps sono innumerevoli e possono essere sfruttate dall'utente per ottenere più informazioni possibili su uno o più processi.
Un'opzione interessante è quella che ci permette di mettere in evidenza un determinato elemento della process table; ci basterà infatti utilizzare
Codice:
ps %x
dove x è una tra le variabili riportate qui sotto


  • %C -> %CPU
  • %G -> GROUP
  • %P -> PPID
  • %U -> USER
  • %a -> COMMAND
  • %c -> COMMAND
  • %g -> RGROUP
  • %n -> NI
  • %p -> PID
  • %r -> PGID
  • %t -> ELAPSED
  • %u -> RUSER
  • %x ->TIME
  • %y -> TTY
  • %z -> VSZ



Questo però solo se si vuole utilizzare una sintassi BSD altrimenti le più utilizzate della sintass SysV sono -f, che lista tutte le info relative ad un processo e -e che lista tutti i processi.
L'output avrà una forma simile a questa:

Codice:
nhoya@box:~$ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 11:44 ?        00:00:01 init [2] 
root         2     0  0 11:44 ?        00:00:00 [kthreadd]
root         3     2  0 11:44 ?        00:00:00 [ksoftirqd/0]
root         6     2  0 11:44 ?        00:00:00 [migration/0]
root         7     2  0 11:44 ?        00:00:00 [watchdog/0]
root         8     2  0 11:44 ?        00:00:00 [migration/1]
root        10     2  0 11:44 ?        00:00:00 [ksoftirqd/1]
root        12     2  0 11:44 ?        00:00:00 [watchdog/1]
root        13     2  0 11:44 ?        00:00:00 [migration/2]
root        15     2  0 11:44 ?        00:00:00 [ksoftirqd/2]
root        16     2  0 11:44 ?        00:00:00 [watchdog/2]
root        17     2  0 11:44 ?        00:00:00 [migration/3]
root        19     2  0 11:44 ?        00:00:00 [ksoftirqd/3]
root        20     2  0 11:44 ?        00:00:00 [watchdog/3]
root        21     2  0 11:44 ?        00:00:00 [cpuset]
root        22     2  0 11:44 ?        00:00:00 [khelper]
root        23     2  0 11:44 ?        00:00:00 [kdevtmpfs]
root        24     2  0 11:44 ?        00:00:00 [netns]
root        25     2  0 11:44 ?        00:00:00 [sync_supers]
root        26     2  0 11:44 ?        00:00:00 [bdi-default]
root        27     2  0 11:44 ?        00:00:00 [kintegrityd]
root        28     2  0 11:44 ?        00:00:00 [kblockd]
root        30     2  0 11:44 ?        00:00:00 [khungtaskd]
root        31     2  0 11:44 ?        00:00:00 [kswapd0]
root        32     2  0 11:44 ?        00:00:00 [ksmd]
root        33     2  0 11:44 ?        00:00:00 [khugepaged]
root        34     2  0 11:44 ?        00:00:00 [fsnotify_mark]
root        35     2  0 11:44 ?        00:00:00 [crypto]
root       113     2  0 11:44 ?        00:00:00 [khubd]
root       158     2  0 11:44 ?        00:00:00 [kworker/u:1]
root       180     2  0 11:44 ?        00:00:00 [ata_sff]
root       203     2  0 11:44 ?        00:00:00 [kworker/u:2]
root       224     2  0 11:44 ?        00:00:00 [scsi_eh_0]
root       227     2  0 11:44 ?        00:00:00 [scsi_eh_1]
root       272     2  0 11:44 ?        00:00:00 [jbd2/sda2-8]
root       273     2  0 11:44 ?        00:00:00 [ext4-dio-unwrit]
root       420     1  0 11:44 ?        00:00:00 udevd --daemon
root       628     2  0 11:44 ?        00:00:00 [led_workqueue]
root       670     2  0 11:44 ?        00:00:00 [kpsmoused]
root       698     2  0 11:44 ?        00:00:00 [cfg80211]
root       752     2  0 11:44 ?        00:00:00 [hd-audio0]
root       772     2  0 11:44 ?        00:00:00 [hd-audio2]
root      1115     2  0 11:44 ?        00:00:00 [hci0]
root      1143     2  0 11:44 ?        00:00:00 [flush-8:0]
root      1204     2  0 11:45 ?        00:00:00 [kdmflush]
root      1206     2  0 11:45 ?        00:00:00 [kcryptd_io]
root      1207     2  0 11:45 ?        00:00:00 [kcryptd]
root      1929     2  0 11:45 ?        00:00:00 [jbd2/dm-0-8]
root      1930     2  0 11:45 ?        00:00:00 [ext4-dio-unwrit]
root      2199     2  0 11:45 ?        00:00:00 [flush-254:0]
root      2211     1  0 11:45 ?        00:00:00 dhclient -v -pf /run/dhclient.et
root      2587     1  0 11:45 ?        00:00:00 /usr/sbin/rsyslogd -c5
nobody    2668     1  0 11:45 ?        00:00:00 /usr/bin/gdomap -I /var/run/gdom
root      2679     1  0 11:45 ?        00:00:00 /usr/sbin/atieventsd
root      2697     1  0 11:45 ?        00:00:00 /usr/sbin/acpid
lp        2715     1  0 11:45 ?        00:00:00 /usr/sbin/lpd -s
daemon    2716     1  0 11:45 ?        00:00:00 /usr/sbin/atd
root      2717     1  0 11:45 ?        00:00:00 /usr/sbin/cron
101       2752     1  0 11:45 ?        00:00:01 /usr/bin/dbus-daemon --system
avahi     2835     1  0 11:45 ?        00:00:00 avahi-daemon: running [box.local
avahi     2836  2835  0 11:45 ?        00:00:00 avahi-daemon: chroot helper
pulse     2874     1  0 11:45 ?        00:00:00 /usr/bin/pulseaudio --system --d
109       2908     1  0 11:45 ?        00:00:08 /usr/bin/tor --defaults-torrc /u
root      2911   420  0 11:45 ?        00:00:00 udevd --daemon
root      2913   420  0 11:45 ?        00:00:00 udevd --daemon
root      2930     1  0 11:45 ?        00:00:00 /usr/sbin/cupsd -C /etc/cups/cup
colord    2955     1  0 11:45 ?        00:00:00 /usr/lib/x86_64-linux-gnu/colord
colord    2959     1  0 11:45 ?        00:00:00 /usr/lib/x86_64-linux-gnu/colord
root      2965     1  0 11:45 ?        00:00:06 /usr/bin/python -O /usr/share/wi
lp        2986  2930  0 11:45 ?        00:00:00 Epson_Stylus_SX130 3 anonymous T
lp        2987  2930  0 11:45 ?        00:00:00 Epson_Stylus_SX130 3 anonymous T
root      2989  2930  0 11:45 ?        00:00:04 usb://EPSON/Stylus%20SX130?seria
root      3020     1  0 11:45 ?        00:00:00 /usr/sbin/console-kit-daemon --n
root      3088     1  0 11:45 ?        00:00:00 /usr/lib/policykit-1/polkitd --n
lp        3097  2986  0 11:45 ?        00:00:01 /usr/bin/gs -dQUIET -dPARANOIDSA
root      3101     1  0 11:45 ?        00:00:07 /opt/teamviewer/tv_bin/teamviewe
root      3103     1  0 11:45 tty1     00:00:00 /bin/login --     
root      3104     1  0 11:45 tty2     00:00:00 /sbin/getty 38400 tty2
root      3105     1  0 11:45 tty3     00:00:00 /sbin/getty 38400 tty3
root      3106     1  0 11:45 tty4     00:00:00 /sbin/getty 38400 tty4
root      3107     1  0 11:45 tty5     00:00:00 /sbin/getty 38400 tty5
root      3108     1  0 11:45 tty6     00:00:00 /sbin/getty 38400 tty6
root      3127  2965  0 11:45 ?        00:00:02 /usr/bin/python -O /usr/share/wi
nhoya     3144  3103  0 11:45 tty1     00:00:00 -bash
nhoya     3150  3144  0 11:45 tty1     00:00:00 /bin/sh /usr/bin/startx
nhoya     3167  3150  0 11:45 tty1     00:00:00 xinit /etc/X11/xinit/xinitrc --
root      3168  3167  9 11:45 tty7     00:07:06 /usr/bin/X -nolisten tcp :0 -aut
nhoya     3213  3167  0 11:45 tty1     00:00:00 /usr/bin/ck-launch-session /usr/
nhoya     3261  3213  0 11:45 ?        00:00:00 /usr/bin/ssh-agent /usr/bin/ck-l
nhoya     3270  3213  0 11:45 tty1     00:00:00 /bin/sh /etc/xdg/xfce4/xinitrc -
nhoya     3273     1  0 11:45 tty1     00:00:00 /usr/bin/dbus-launch --exit-with
nhoya     3274     1  0 11:45 ?        00:00:00 /usr/bin/dbus-daemon --fork --pr
nhoya     3282     1  0 11:45 ?        00:00:00 /usr/lib/xfce4/xfconf/xfconfd
nhoya     3303     1  0 11:45 ?        00:00:00 gpg-agent --daemon --write-env-f
nhoya     3309  3270  0 11:45 tty1     00:00:00 xscreensaver -no-splash
nhoya     3311  3270  0 11:45 tty1     00:00:00 xfce4-session
nhoya     3337     1  0 11:45 tty1     00:00:01 xfwm4
nhoya     3339     1  0 11:45 tty1     00:00:02 xfce4-panel
nhoya     3341     1  0 11:45 tty1     00:00:00 Thunar --daemon
nhoya     3343     1  0 11:45 tty1     00:00:00 xfdesktop
nhoya     3346     1  0 11:45 tty1     00:00:00 xfsettingsd --force
nhoya     3348     1  0 11:45 ?        00:00:00 /usr/lib/gvfs/gvfsd
nhoya     3350     1  0 11:45 tty1     00:00:00 /usr/lib/policykit-1-gnome/polki
nhoya     3376     1  0 11:45 tty1     00:00:00 /usr/bin/python -O /usr/share/wi
nhoya     3379     1  2 11:45 ?        00:01:35 /usr/bin/pulseaudio --start
rtkit     3381     1  0 11:45 ?        00:00:00 /usr/lib/rtkit/rtkit-daemon
nhoya     3388     1  0 11:45 ?        00:00:00 xfce4-volumed
nhoya     3389  3311  0 11:45 tty1     00:00:00 /usr/bin/python /usr/bin/guake
nhoya     3410     1  0 11:45 ?        00:00:00 xfce4-power-manager
nhoya     3412     1  0 11:45 tty1     00:00:00 xfce4-settings-helper
nhoya     3439  3379  0 11:45 ?        00:00:00 /usr/lib/pulseaudio/pulse/gconf-
nhoya     3441     1  0 11:45 ?        00:00:00 /usr/lib/x86_64-linux-gnu/gconf/
root      3443     1  0 11:45 ?        00:00:00 /usr/lib/upower/upowerd
nhoya     3493  3339  0 11:46 tty1     00:00:00 /usr/lib/x86_64-linux-gnu/xfce4/
nhoya     3495  3339  0 11:46 tty1     00:00:00 /usr/lib/x86_64-linux-gnu/xfce4/
nhoya     3562  3339  0 11:46 tty1     00:00:00 /usr/lib/x86_64-linux-gnu/xfce4/
nhoya     3665  3389  0 11:46 tty1     00:00:00 gnome-pty-helper
nhoya     3667  3389  0 11:46 pts/0    00:00:00 /bin/bash
root      3804     1  0 11:46 ?        00:00:00 dhclient -v -pf /run/dhclient.wl
root      3866     1  0 11:46 ?        00:00:00 /usr/sbin/sshd
root      4396  2679  0 11:46 ?        00:00:00 sh -c /etc/ati/authatieventsd.sh
root      4397  4396  0 11:46 ?        00:00:00 /bin/sh /etc/ati/authatieventsd.
nhoya     4429  3339 32 11:47 tty1     00:22:36 iceweasel
nhoya     5172     1  0 12:15 tty1     00:00:01 xfce4-terminal
nhoya     5173  5172  0 12:15 tty1     00:00:00 gnome-pty-helper
nhoya     5174  5172  0 12:15 pts/1    00:00:00 bash
root      5196     2  0 12:15 ?        00:00:00 [kworker/2:0]
root      5373     2  0 12:26 ?        00:00:01 [kworker/3:1]
root      5519     2  0 12:36 ?        00:00:00 [kworker/3:0]
root      5531     2  0 12:37 ?        00:00:00 [kworker/0:1]
root      5539     2  0 12:37 ?        00:00:00 [kworker/2:3]
root      5590     2  0 12:41 ?        00:00:01 [kworker/1:2]
root      5606     2  0 12:42 ?        00:00:00 [kworker/0:2]
root      5691     2  0 12:48 ?        00:00:00 [kworker/2:2]
root      5743     2  0 12:51 ?        00:00:00 [kworker/1:0]
root      5749     2  0 12:51 ?        00:00:00 [kworker/0:0]
root      5751     2  0 12:51 ?        00:00:00 [kworker/1:3]
root      5756     2  0 12:52 ?        00:00:00 [kworker/3:2]
root      5796     2  0 12:55 ?        00:00:00 [kworker/2:1]
root      5832     2  0 12:57 ?        00:00:00 [kworker/3:3]
nhoya     5845  5174  0 12:58 pts/1    00:00:00 ps -ef
Dove:

  • UID indica l'ID dell'utente che ha il controllo sul processo il processo*
  • GID indica l'ID del gruppo a di cui fa parte l'utente*
  • PID l'ID del processo
  • PPID indica l'ID del processo padre
  • C Ultima CPU utilizzata dal processo
  • STIME ora di avvio del processo
  • TTY terminale di controllo del processo


N.B. ho inserito una nota accanto a UID e GID questo perchè essi *non* identificano l'utente che ha lanciato il processo ma solo chi ne ha il controllo effettivo.. Per verificare chi ha lanciato un processo basterà fare riferimento alle voci RUSER e RGROUP


--top
next-left.png

Top è un utility che differisce da ps perchè permette di monitorare e gestire i processi in maniera dinamica osservandone il comportamento in tempo reale

Questo strumento è molto potente e ci permette di inviare comandi in maniera interattiva così da poter dare uno sguardo in real time a ciò che accade sulla nostra machina.
Ecco alcune opzioni interessanti (come sempre per tutto il resto c'è man):



  • k ci permette di inviare un segnale ad un processo (predefinito SIGKILL)
  • r invece permete di far cambiare priorità ad un process
  • u visualizza tutti i processi relativi ad un utente
  • h mostra il manuale
  • q termina


Alcune delle voci presenti in top fanno riferimento alla memoria del sistema, per vedere in che stato è ci basta utilizzare il comando
Come altrnativa a top vi consiglio htop, utility parecchio più completa e intuitiva


--I segnali,kill, pkill, killall e pgrep
kill, come molti erroneamente pensano, *non* hanno come unica funzione quella di terminare un processo infatti quello che in realtà fanno è inviare un segnale ad un determinato processo da noi indicato
con
Codice:
$ kill -l
possiamo vedere tutti i tipi di segnale che che possiamo inviare
Codice:
nhoya@box:~$ kill -l
1) SIGHUP     2) SIGINT     3) SIGQUIT     4) SIGILL     5) SIGTRAP
6) SIGABRT     7) SIGBUS     8) SIGFPE     9) SIGKILL    10) SIGUSR1
11) SIGSEGV    12) SIGUSR2    13) SIGPIPE    14) SIGALRM    15) SIGTERM
16) SIGSTKFLT    17) SIGCHLD    18) SIGCONT    19) SIGSTOP    20) SIGTSTP
21) SIGTTIN    22) SIGTTOU    23) SIGURG    24) SIGXCPU    25) SIGXFSZ
26) SIGVTALRM    27) SIGPROF    28) SIGWINCH    29) SIGIO    30) SIGPWR
31) SIGSYS    34) SIGRTMIN    35) SIGRTMIN+1    36) SIGRTMIN+2    37) SIGRTMIN+3
38) SIGRTMIN+4    39) SIGRTMIN+5    40) SIGRTMIN+6    41) SIGRTMIN+7    42) SIGRTMIN+8
43) SIGRTMIN+9    44) SIGRTMIN+10    45) SIGRTMIN+11    46) SIGRTMIN+12    47) SIGRTMIN+13
48) SIGRTMIN+14    49) SIGRTMIN+15    50) SIGRTMAX-14    51) SIGRTMAX-13    52) SIGRTMAX-12
53) SIGRTMAX-11    54) SIGRTMAX-10    55) SIGRTMAX-9    56) SIGRTMAX-8    57) SIGRTMAX-7
58) SIGRTMAX-6    59) SIGRTMAX-5    60) SIGRTMAX-4    61) SIGRTMAX-3    62) SIGRTMAX-2
63) SIGRTMAX-1    64) SIGRTMAX
Quelli realemente utilizzati dal sistema sono quelli che vanno dal 1 al 31, gli altri prendono il nome di real time signal (vengono utilizzati spesso in programmazione durante la gestione delle librerie)
Ogni segnale è definito da uno dei 4 standard fontamentali ovvero:

  • POSIX
  • BSD
  • Linux
  • SUSv2

Inoltre possono essere distinti in base alla loro azione predefinita. Possiamo quindi riassumerli con:

  1. Segnali che Terminano un processo
  2. Segnali che ingorano altri segnali
  3. Segnali che terminano il processo e dumpano il core (sarebbe un file all'interno del quale viene salvata una copia della memoria del processo)
  4. Segnali che fermano il processo
  5. Segnali che non possono essere intercettati
  6. Segnali che non possono essere ignorati


Ecco quindi una pratica tabella che vi illustrerà il compito dei segnali fondamentali
SEGNALEFUNZIONESTANDARDGRUPPO
SIGHUPTermina il processo di controlloPOSIX - Linux1
SIGINTTermina da keyboardPOSIX - Linux1
SIGQUITQuit da keyboardPOSIX - Linux3
SIGILLEvento non consentitoPOSIX - Linux3
SIGABRTSegnale di AbortoPOSIX - Linux3
SIGFPEErrore di calcoloPOSIX - Linux3
SIGKILLKill del processoPOSIX - Linux1-5-6
SIGSEGVErrore di accesso alla memoriaPOSIX - Linux3
SIGPIPEPipe saltataPOSIX - Linux1
SIGALRMSegnale timerPOSIX - Linux1
SIGTERMTerminazione del processoPOSIX - Linux1
SIGUSR1Segnale utente 1POSIX - Linux1
SIGUSR2Segnale utente 2POSIX - Linux1
SIGCHLDIndica che il figlio è terminato o mortoPOSIX - Linux2
SIGCONTIgnora SIGSTOPPOSIX - Linux2
SIGSTOPFerma il processoPOSIX - Linux4-5-6
SIGTSTPUtilizzo del segnale stop da terminalePOSIX - Linux4
SIGTTINInput da terminale per processo in bkgPOSIX - Linux4
SIGTTOUOutput da teminale per processo in bkgPOSIX - Linux4
SIGBUSErrore Bad Memory AccessSUSv2 -Linux3
SIGPOLL= SIGIOSUSv2 -Linux1
SIGPROFProfiling timer scadutoSUSv2 -Linux1
SIGSYSSoubrutine errata3
SIGTRAPTrap per un breakpoint3
SIGURGRicezione condizione urgenteSUSv2-Linux-BSD2
SIGVTALRMAllarme virtualeSUSv2-Linux-BSD1
SIGXCPULimite CPU SuperatoSUSv2-Linux-BSD3
SIGXFSZLimite dimensione file superatoSUSv2-Linux-BSD3
SIGIOT= SIGABRTLinux3
SIGTKFLTErrore sullo stack del coprocessoreLinux1
SIGIOI/O possibileLinux - BSD1
SIGCLD= SIGCHLDLinux
SIGPWRMancanza di segnale alimentazioneLinux1
SIGINFOGenera info su un processoLinux
SIGLOSTPerso un lockLinux1
SIGWINCHFinestra ridimensionataLinux - BSD2
SIGUNUSEDSegnale non utilizzato (di default è uguale a SIGSYS)Linux1




Abbiamo detto che i segnali una volta ricevuti dal processo ne scatenano una reazione, esiste però la possibilità di intercettare questi segnali e accodarli ad un'altro comando (tutti tranne SIGSTOP e SIGKILL)

Un comando che ci permette di intercettare il segnale in arrivo è trap:
Codice:
trap "comando_da_eseguire" segnali
un esempio è questo "divertente" loop
Codice:
#!/bin/bash
#call the script "trap"
trap" ./trap" SIGTERM SIGHUP SIGINT #se riceve uno di questi segnali allora avvia lo script di nome trap
echo hello
pkill trap #invia a se stesso il segnale SIGTERM
Come al solito l'originale non commentato lo trovate qua
http://l33tspace.altervista.org/repo/trap/trap

Tornando a noi, kill ha una sintassi simile a questa
Codice:
kill PID
di default invia come segnale SIGTERM ma aggiungendo l'opzione -s o indicando il segnale con il suo numero (li abbiamo visti in kill -l) è possibile cambiare la tipologia di segnali; ad esempio
Codice:
kill -s HUP PID
invia il segnale hup al processo indicato da PID

pkill sostanzialmente fa le stesse cose di kill solo che ci permette di utilizzare il nome del processo e non il PID
killall invece invia (di default) SIGTERM a tutti i processi con quel teterminato nome

pgrep (usato pricipalmente in bash scripting) invece ci permette di fare operazioni di filtraggio per quanto riguarda i processi per esempio
Codice:
nhoya@box:~/Scrivania$ pgrep -u nhoya -d " " #stampa i processi dell'utente nhoya e li separa con uno spazio
3029 3036 3053 3099 3128 3156 3159 3160 3168 3172 3176 3178 3203 3205 3207 3209 3211 3234 3236 3243 3266 3294 3296 3297 3301 3325 3327 3394 3418 3462 3513 4400 5416 7909 7922 7923 10267 11748 15360
ci permette di filtrare i processi secondo i criteri che scegliamo

E' bene ricordare anche che se un processo è stato avviato su un terminale è possibile, grazie ad una combinazione di tasti, mandargli dei segnali. Nello specifico:

  • Ctrl-C invia SIGINT che termina il processo
  • Ctrl-T invia SIGINFO che mostra le info sul processo
  • Ctrl-Z invia SIGTSTP che mete in pausa il processo
  • Ctrl-\ invia SIGQUIT che termina il processo e dumpa il core

Vi lascio un po' di documentazione nel caso in cui abbiate voglia di approfondire:
http://www.howtogeek.com/119815/htg-explains-what-is-a-zombie-process-on-linux/
http://www.spaghettilinux.org/tips-tricks/eliminare-i-processi-zombie
http://oldsite.to.infn.it/groups/group4/mirror/linux/AppuntiLinux/AL-2.6.26.html
http://stackoverflow.com/questions/16944886/how-to-kill-zombie-process
http://www.skyflash.it/computer/lin...dere-processi-zombie-in-un-server-linux/6076/
http://openskill.info/topic.php?ID=33
http://www.cyberciti.biz/tips/killing-zombie-process.html
http://www.coresis.com/extra/linuxcorsobase/10-2.htm
http://linux.about.com/library/cmd/blcmdl1_pkill.htm
http://www.thegeekstuff.com/2011/09/linux-htop-examples/
http://www.kevinoo.altervista.org/informatica/2012/11/30/il-significato-di-load-average-in-linux/
 
Stato
Discussione chiusa ad ulteriori risposte.