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:
--Intro
Iniziamo dando uno sguardo a cosa succede all'interno del nostro sistema
Avremo un output simile a questo
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
Parlando di processi è bene sempre ricordare che:
Fondamentale per quanto riguarda la gestione dei processi è la funzione di /proc
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
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)
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:
N.B. Nel caso in cui avessimo avuto necessità di avere il PID di un singolo processo a partire dal nome avremmo potuto utilizzare
Vediamo adesso come poter combinare le varie opzioni del comando ps per avere maggiori informazioni sui processi:
Digitiamo il comando
che non è altro che la combinazione delle opzioni
Apparirà su schermo una cosa simile:
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:
A queste opzioni se ne possono aggiungere altre tipiche dei sistemi BSD che ne specificano ancor di più lo stato. Esse sono:
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:
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
dove x è una tra le variabili riportate qui sotto
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:
Dove:
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
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):
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
possiamo vedere tutti i tipi di segnale che che possiamo inviare
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:
Inoltre possono essere distinti in base alla loro azione predefinita. Possiamo quindi riassumerli con:
Ecco quindi una pratica tabella che vi illustrerà il compito dei segnali fondamentali
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:
un esempio è questo "divertente" loop
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
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
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
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:
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/
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
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
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:
- ogni processo è associato un utente che lo ha lanciato ed uno che ne detiene la gestione (possono coincidere)
- posseggono una directory di riferimento
- ogni processo è in grado di ricevere e inviare diversi tipi di segnali che innescheranno in esso una reazione
- 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
--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
Codice:
nhoya@box:/$ ps
PID TTY TIME CMD
9774 pts/1 00:00:00 bash
10113 pts/1 00:00:00 ps
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
- 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
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
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
- %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
- 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
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
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
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:
- Segnali che Terminano un processo
- Segnali che ingorano altri segnali
- Segnali che terminano il processo e dumpano il core (sarebbe un file all'interno del quale viene salvata una copia della memoria del processo)
- Segnali che fermano il processo
- Segnali che non possono essere intercettati
- Segnali che non possono essere ignorati
Ecco quindi una pratica tabella che vi illustrerà il compito dei segnali fondamentali
SEGNALE | FUNZIONE | STANDARD | GRUPPO |
SIGHUP | Termina il processo di controllo | POSIX - Linux | 1 |
SIGINT | Termina da keyboard | POSIX - Linux | 1 |
SIGQUIT | Quit da keyboard | POSIX - Linux | 3 |
SIGILL | Evento non consentito | POSIX - Linux | 3 |
SIGABRT | Segnale di Aborto | POSIX - Linux | 3 |
SIGFPE | Errore di calcolo | POSIX - Linux | 3 |
SIGKILL | Kill del processo | POSIX - Linux | 1-5-6 |
SIGSEGV | Errore di accesso alla memoria | POSIX - Linux | 3 |
SIGPIPE | Pipe saltata | POSIX - Linux | 1 |
SIGALRM | Segnale timer | POSIX - Linux | 1 |
SIGTERM | Terminazione del processo | POSIX - Linux | 1 |
SIGUSR1 | Segnale utente 1 | POSIX - Linux | 1 |
SIGUSR2 | Segnale utente 2 | POSIX - Linux | 1 |
SIGCHLD | Indica che il figlio è terminato o morto | POSIX - Linux | 2 |
SIGCONT | Ignora SIGSTOP | POSIX - Linux | 2 |
SIGSTOP | Ferma il processo | POSIX - Linux | 4-5-6 |
SIGTSTP | Utilizzo del segnale stop da terminale | POSIX - Linux | 4 |
SIGTTIN | Input da terminale per processo in bkg | POSIX - Linux | 4 |
SIGTTOU | Output da teminale per processo in bkg | POSIX - Linux | 4 |
SIGBUS | Errore Bad Memory Access | SUSv2 -Linux | 3 |
SIGPOLL | = SIGIO | SUSv2 -Linux | 1 |
SIGPROF | Profiling timer scaduto | SUSv2 -Linux | 1 |
SIGSYS | Soubrutine errata | 3 | |
SIGTRAP | Trap per un breakpoint | 3 | |
SIGURG | Ricezione condizione urgente | SUSv2-Linux-BSD | 2 |
SIGVTALRM | Allarme virtuale | SUSv2-Linux-BSD | 1 |
SIGXCPU | Limite CPU Superato | SUSv2-Linux-BSD | 3 |
SIGXFSZ | Limite dimensione file superato | SUSv2-Linux-BSD | 3 |
SIGIOT | = SIGABRT | Linux | 3 |
SIGTKFLT | Errore sullo stack del coprocessore | Linux | 1 |
SIGIO | I/O possibile | Linux - BSD | 1 |
SIGCLD | = SIGCHLD | Linux | |
SIGPWR | Mancanza di segnale alimentazione | Linux | 1 |
SIGINFO | Genera info su un processo | Linux | |
SIGLOST | Perso un lock | Linux | 1 |
SIGWINCH | Finestra ridimensionata | Linux - BSD | 2 |
SIGUNUSED | Segnale non utilizzato (di default è uguale a SIGSYS) | Linux | 1 |
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
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
http://l33tspace.altervista.org/repo/trap/trap
Tornando a noi, kill ha una sintassi simile a questa
Codice:
kill PID
Codice:
kill -s HUP 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
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/