Crea sito
20 Ottobre 2020

Officine Informatiche Roma

ICT SERVICES ROMA – BAZAAR INFORMATICO

Lista dei job e dei processi attivi, jobs, ps

4 min read
Con l'aggiunta del simbolo "&" alla ne della linea di comando, abbiamo lanciato l'applicazione in background, mantenendo l'uso della shell per impostare altri comandi. Con il messaggio "143" il sistema ci comunica che l'applicazione yes è il primo processo lanciato da questa shell e, nella tabella di tutti i processi del sistema, gli è stato assegnato il numero 143 (questo non vuol dire che ci sono 143 processi attivi). Con il comando jobs veri chiamo gli stessi dati ed in più un sistema ci comunica che l'applicazione e attualmente in esecuzione (running). Il comando ps ci fornisce delle informazioni su tutti i nostri processi attivi, non solo quelli lanciati attraverso una certa shell; l'esempio mostra che nel nostro caso sono attivi tre processi, tutti sul terminale tty1: bash, la shell è attiva da un'ora e 32 minuti ed e momentaneamente sospesa (\S") perchè sta eseguendo il comando ps, che è stato appena attivato ed è in esecuzione (\R"), come pure il programma yes,attivo anche questo solo da qualche istante.

Con l’aggiunta del simbolo “&” alla fine della linea di comando, abbiamo lanciato l’applicazione in background, mantenendo l’uso della shell per impostare altri comandi.

Con il messaggio “143” il sistema ci comunica che l’applicazione yes è il primo processo lanciato da questa shell e, nella tabella di tutti i processi del sistema, gli è stato assegnato il numero 143 (questo non vuol dire che ci sono 143 processi attivi). Con il comando jobs veri chiamo gli stessi dati ed in più un sistema ci comunica che l’applicazione e attualmente in esecuzione (running). Il comando ps ci fornisce delle informazioni su tutti i nostri processi attivi, non solo quelli lanciati attraverso una certa shell; l’esempio mostra che nel nostro caso sono attivi tre processi, tutti sul terminale tty1: bash, la shell è attiva da un’ora e 32 minuti ed e momentaneamente sospesa (\S”) perchè sta eseguendo il comando ps, che è stato appena attivato ed è in esecuzione (\R”), come pure il programma yes,attivo anche questo solo da qualche istante.

Osserviamo infine che con il comando bg è possibile riavviare in background un processo precedentemente sospeso con Ctrl-z . Il comando bg accetta come argomento il job id preceduto dal simbolo di percentuale o il numero del processo. Come abbiamo gia accennato nelle pagine precedenti ogni programma attivo su un sistema Unix viene eseguito a nome e per conto di un determinato utente e da questo eredita i permessi per le operazioni sul  filesystem; i processi di sistema vengono eseguiti, in genere, a nome dell’utente root: anche se questo non li ha lanciati digitando un comando sul terminale, durante la fase di bootstrap (la sequenza di start-up del sistema eseguita subito dopo l’accensione o un riavvio della macchina) vengono lanciati numerosi processi che rimarranno attivi (anche se in background) fino al successivo shutdown del sistema.

Questi processi vengono chiamati in gergo “demoni” (daemons). Con il comando ps è possibile visualizzare anche l’elenco di tutti i processi attivi sul sistema; nelle opzioni del comando necessarie per compiere tale operazione, emerge una delle poche differenze tra Unix di tipo BSD e System V visibili anche all’utente generico. Sui sistemi BSD per visualizzare tutti i processi attivi bisogna aggiungere al comando ps le opzioni ” \-auxw”, mentre sugli Unix SVR4 le opzioni sono \-ef”; l’output è molto simile in entrambi i casi; di seguito riportiamo un esempio estratto dall’output prodotto su una macchina Sun Solaris 8 (dunque una versione di Unix System V):

$ ps -ef

UID PID PPID C STIME TTY TIME CMD
root 0 0 0 Aug 16 ? 0:16 sched
root 1 0 0 Aug 16 ? 0:52 /etc/init –
root 2 0 0 Aug 16 ? 0:00 pageout
root 3 0 0 Aug 16 ? 67:57 fsflush
www 297 292 0 Aug 16 ? 0:38 /usr/apache/bin/httpd
root 112 1 0 Aug 16 ? 0:00 /usr/sbin/in.routed -q
root 284 1 0 Aug 16 ? 0:00 /usr/lib/nfs/mountd
root 255 1 0 Aug 16 ? 0:31 /usr/local/sbin/sshd
root 155 1 0 Aug 16 ? 1:01 /usr/sbin/inetd -s
root 172 1 0 Aug 16 ? 16:26 /usr/sbin/syslogd
www 299 292 0 Aug 16 ? 0:39 /usr/apache/bin/httpd
marco 10216 10214 0 21:50:29 pts/1 0:00 -tcsh
root 292 1 0 Aug 16 ? 0:04 /usr/apache/bin/httpd

L’output viene incolonnato e sulla prima riga sono riportate delle etichette che aiutano ad interpretare il signi cato delle righe successive: sulla prima colonna viene riportato lo username (UID) dell’utente che sta eseguendo il processo; nella seconda colonna viene visualizzato il process id (PID), ossia il numero progressivo che identifica univocamente un determinato processo; subito dopo, nella terza colonna, è riportato il numero identificativo del processo padre (PPID, parent process id ), ossia del processo Gerarchia che ha eseguito il processo a cui si riferisce la riga in esame.

Come processi si vede nell’esempio il programma sched è il primo ad essere lanciato (il PID e 0) e
da quel processo sono stati lanciati altri tre processi: /etc/init (PID=1), pageout (PID=2) e fsflush (PID=3).

A sua volta il programma init ha lanciato molti altri processi. E’ interessante notare che il padre del processo con ID=0 e il processo stesso (PID=PPID=0): deve pur esistere un processo da cui ha origine lo start-up del sistema operativo e dei processi principali, tuttavia, interpretando i codici PID e PPID di tale processo, sembra proprio che sia nato da se stesso; questo giustifica l’espressione gergale bootstrap che richiama l’idea che la macchina per partire (o per “salire”, altra espressione nel gergo degli utenti Unix) sembrerebbe essersi sollevata da terra tirandosi per i lacci delle scarpe!
Nella colonna TTY viene indicato il terminale da cui e stato lanciato il processo; come si vede nell’esempio molti processi non sono associati a nessun terminale, visto che sono demoni lanciati automaticamente durante la fase di boot del sistema.

Translate »