File: a253.html

package info (click to toggle)
appunti-informatica-libera 2001.08.18-2
  • links: PTS
  • area: main
  • in suites: woody
  • size: 27,912 kB
  • ctags: 23,734
  • sloc: makefile: 69
file content (183 lines) | stat: -rw-r--r-- 11,430 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"    "http://www.w3.org/TR/html4/strict.dtd">
<HTML LANG="it">
<HEAD>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html">
    <META NAME="Generator" CONTENT="Alml">
    <META NAME="Description" CONTENT="GNU/Linux e altro software libero">
    <META NAME="Keywords" CONTENT="Linux, GNU/Linux, Unix, software, software libero, free software">
    <META NAME="Author" CONTENT="Daniele Giacomini &nbsp;&nbsp; &nbsp;daniele&nbsp;@&nbsp;swlibero.org">
    <META NAME="Date" CONTENT="2001.08.18 ">
    <META NAME="Resource-type" LANG="en" CONTENT="Document" >
    <META NAME="Revisit-after" LANG="en" CONTENT="15 days" >
    <META NAME="Robots" CONTENT="ALL" >
    <TITLE> Appunti di informatica libera</TITLE>
    <LINK REL="stylesheet" TYPE="text/css" HREF="a2.css">
    <LINK REL="Start" TITLE="Start" HREF="a2.html">
    <LINK REL="Prev" TITLE="Previous" HREF="a252.html">
    <LINK REL="Next" TITLE="Next" HREF="a254.html">
</HEAD>
<BODY>
<P>
<A HREF="a254.html">[successivo]</A>
<A HREF="a252.html">[precedente]</A>
<A HREF="a2.html">[inizio]</A>
<A HREF="a2506.html">[fine]</A>
<A HREF="a21.html">[indice generale]</A>
<A HREF="a26.html">[violazione GPL]</A>
<A HREF="a2504.html">[licenze]</A>
<A HREF="a2505.html">[indice analitico]</A>
<A HREF="a241.html">[tomo]</A>
<A HREF="a249.html">[parte]</A>
</P>
<HR>
<DIV>
<H1>Capitolo 35. &nbsp; <A NAME="title565"></A><A NAME="anchor697"></A> Invio di segnali ai processi <A NAME="index2956"></A> <A NAME="index2957"></A> </H1>

<P>I segnali sono dei numeri ai quali i programmi attribuiscono significati determinati, relativi a quanto accade nel sistema. I segnali rappresentano sia un'informazione che un ordine: nella maggior parte dei casi i programmi possono intercettare i segnali e compiere delle operazioni correlate prima di adeguarsi al nuovo stato, oppure addirittura rifiutare gli ordini; in altri casi sono sottomessi immediatamente agli ordini.</P>

<P>La tabella <A HREF="a250.html#anchor667">32.1</A> elenca i segnali descritti dallo standard POSIX.1, mentre l'elenco completo pu&ograve; essere ottenuto consultando la <A NAME="index2958"></A>pagina di manuale <EM>signal</EM>(7).</P>

<P>I numeri dei segnali sono stati abbinati a nomi standard che ne rappresentano in breve il significato (in forma di abbreviazione o di acronimo). I numeri dei segnali non sono standard tra i vari sistemi Unix e dipendono dal tipo di architettura hardware utilizzata. Anche all'interno di GNU/Linux stesso ci possono essere differenze a seconda del tipo di macchina che si utilizza.</P>

<P>Questo particolare &egrave; importante sia per giustificare il motivo per cui &egrave; opportuno fare riferimento ai segnali in forma verbale, sia per ricordare la necessit&agrave; di fare attenzione con i programmi che richiedono l'indicazione di segnali esclusivamente in forma numerica (per esempio <SAMP>top</SAMP>).</P>

<H2>35.1 &nbsp; <A NAME="title566"></A><A NAME="anchor698"></A>
 Segnali attraverso la tastiera </H2>

<P>Alcuni segnali possono essere inviati al programma con il quale si interagisce attraverso delle combinazioni di tasti. Di solito si invia un segnale <SAMP>SIGINT</SAMP> attraverso la combinazione [<KBD>Ctrl+c</KBD>], un segnale <SAMP>SIGTSTP</SAMP> attraverso la combinazione [<KBD>Ctrl+z</KBD>] e un segnale <SAMP>SIGQUIT</SAMP> attraverso la combinazione [<KBD>Ctrl+\</KBD>].</P>

<P>L'effetto di queste combinazioni di tasti dipende dalla configurazione della linea di terminale. Questa pu&ograve; essere controllata o modificata attraverso il programma <SAMP>stty</SAMP> (<A HREF="a262.html#anchor791">41.3.2</A>). Come si pu&ograve; vedere dall'esempio seguente, alcune combinazioni di tasti (rappresentate nella forma ^<VAR>x</VAR>) sono associate a delle funzioni. Nel caso di quelle appena descritte, le funzioni sono <SAMP>intr</SAMP>, <SAMP>susp</SAMP> e <SAMP>quit</SAMP>.</P>

<P class="command"><CODE>$&nbsp;</CODE><STRONG><CODE>stty -a</CODE></STRONG>[<KBD>Invio</KBD>]</P>

<PRE>speed 38400 baud; rows 28; columns 88; line = 204;
intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = &lt;undef&gt;;
eol2 = &lt;undef&gt;; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany imaxbel
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke</PRE>

<H2>35.2 &nbsp; <A NAME="title567"></A><A NAME="anchor699"></A>
 Segnali attraverso la <A NAME="index2959"></A>shell </H2>

<P>Le <A NAME="index2960"></A>shell offrono generalmente dei comandi interni per l'invio di segnali ai processi da loro avviati. In particolare, quelle che come <A NAME="index2961"></A>Bash sono in grado di gestire i <A NAME="index2962"></A>job, utilizzano i segnali in modo trasparente per fare riprendere un processo sospeso.</P>

<P>Per esempio, nel caso di <A NAME="index2963"></A>Bash, se un processo viene sospeso attraverso la combinazione [<KBD>Ctrl+z</KBD>], cosa che dovrebbe generare un segnale <SAMP>SIGTSTP</SAMP> (in base alla configurazione della linea di terminale), questo pu&ograve; essere riportato <A NAME="index2964"></A>in primo piano, e quindi in funzione, attraverso il comando <SAMP>fg</SAMP>, con il quale in pratica si invia al processo un segnale <SAMP>SIGCONT</SAMP>.</P>

<H2>35.3 &nbsp; <A NAME="title568"></A><A NAME="anchor700"></A>
 Comando kill </H2>

<P>Il modo normale per inviare un segnale a un processo &egrave; l'uso di <SAMP>kill</SAMP>. Questo, a seconda dei casi, pu&ograve; essere un comando interno di <A NAME="index2965"></A>shell o un programma. Il nome <SAMP>kill</SAMP> deriva in particolare dall'effetto che si ottiene utilizzandolo senza l'indicazione esplicita di un segnale da inviare: quello predefinito &egrave; <SAMP>SIGTERM</SAMP> attraverso il quale si ottiene normalmente la conclusione del processo destinatario.</P>

<P>Attraverso <SAMP>kill</SAMP> si riesce solitamente a ottenere un elenco dei segnali disponibili con il loro numero corrispondente. Ci&ograve; &egrave; molto importante per conoscere esattamente quale numero utilizzare con i programmi che non permettono l'indicazione dei segnali in forma verbale.</P>

<P class="command"><CODE>$&nbsp;</CODE><STRONG><CODE>kill -l</CODE></STRONG>[<KBD>Invio</KBD>]</P>

<PRE> 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP      6) SIGIOT       7) SIGBUS       8) SIGFPE
 9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
13) SIGPIPE     14) SIGALRM     15) SIGTERM     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</PRE>

<P>Nelle sezioni seguenti viene descritto il programma <SAMP>kill</SAMP>, mentre di solito, se non si indica esplicitamente che si fa riferimento a un programma, interverr&agrave; il comando interno di <A NAME="index2966"></A>shell.</P>

<H3>35.3.1 &nbsp; <A NAME="title569"></A><A NAME="anchor701"></A>
 $ kill <A NAME="index2967"></A> </H3>

<P class="syntax"><TT>kill<STRONG><BIG>[</BIG></STRONG><VAR>opzioni</VAR><STRONG><BIG>]</BIG></STRONG><STRONG><BIG>[</BIG></STRONG><VAR>PID</VAR>...<STRONG><BIG>]</BIG></STRONG>
</TT></P>

<P>Permette di inviare un segnale a uno o pi&ugrave; processi identificati attraverso il loro numero PID. Se non viene specificato, il segnale predefinito &egrave; <SAMP>SIGTERM</SAMP> che normalmente procura la conclusione dell'esecuzione dei processi destinatari. Questo giustifica il nome <SAMP>kill</SAMP>.</P>

<DL>
<DT><STRONG>Alcune opzioni</STRONG></DT>
<DD>

<P class="syntax"><TT>-s<VAR>segnale</VAR>
</TT></P>

<P>Specifica il nome o il numero del segnale da inviare.</P>

<P class="syntax"><TT>-l
</TT></P>

<P>Mostra l'elenco dei segnali disponibili con i numeri corrispondenti.</P>
<DT><STRONG>Esempi</STRONG></DT>
<DD>

<P class="command"><CODE>$&nbsp;</CODE><STRONG><CODE>kill -s SIGHUP 1203</CODE></STRONG></P>

<P>Invia il segnale <SAMP>SIGHUP</SAMP> al processo corrispondente al numero 1&nbsp;203.</P>

<P class="command"><CODE>$&nbsp;</CODE><STRONG><CODE>kill -s 1 1203</CODE></STRONG></P>

<P>Esattamente come nell'esempio precedente</P>

<P class="command"><CODE>$&nbsp;</CODE><STRONG><CODE>kill -l</CODE></STRONG></P>

<P>Mostra l'elenco dei segnali disponibili.</P>

<TABLE BORDER="3" WIDTH="100%">
<TR><TD>

<P>Negli esempi di questo documento viene indicato spesso il segnale da inviare senza l'opzione <SAMP>-s</SAMP>, usando piuttosto la forma <SAMP>-<VAR>segnale</VAR></SAMP>. Questo riguarda il comando interno omonimo della <A NAME="index2968"></A>shell <A NAME="index2969"></A>Bash.</P>

</TD></TR>
</TABLE>
</DD>
</DL>

<H3>35.3.2 &nbsp; <A NAME="title570"></A><A NAME="anchor702"></A>
 $ killall <A NAME="index2970"></A> </H3>

<P class="syntax"><TT>killall<STRONG><BIG>[</BIG></STRONG><VAR>opzioni</VAR><STRONG><BIG>]</BIG></STRONG><STRONG><BIG>[</BIG></STRONG>-<VAR>segnale</VAR><STRONG><BIG>]</BIG></STRONG><STRONG><BIG>[</BIG></STRONG><VAR>comando</VAR>...<STRONG><BIG>]</BIG></STRONG>
</TT></P>

<P>Invia un segnale a tutti i processi che eseguono i comandi specificati. Si utilizza quindi <SAMP>killall</SAMP> per inviare un segnale a dei processi identificati per nome. Se non viene specificato il segnale da inviare, si utilizza <SAMP>SIGTERM</SAMP>. I segnali possono essere indicati per nome o per numero.</P>

<DL>
<DT><STRONG>Alcune opzioni</STRONG></DT>
<DD>

<P class="syntax"><TT>-l
</TT></P>

<P>Mostra l'elenco dei segnali disponibili con i numeri corrispondenti.</P>
<DT><STRONG>Esempi</STRONG></DT>
<DD>

<P class="command"><CODE>$&nbsp;</CODE><STRONG><CODE>killall -HUP pippo</CODE></STRONG></P>

<P>Invia il segnale <SAMP>SIGHUP</SAMP> a tutti i processi avviati con il comando <SAMP>pippo</SAMP>. I processi soggetti a questo sono solo quelli che appartengono all'utente che invia il segnale.</P>
</DD>
</DL>

<H3>35.3.3 &nbsp; <A NAME="title571"></A><A NAME="anchor703"></A>
 # fuser </H3>

<P class="syntax"><TT>fuser<STRONG><BIG>[</BIG></STRONG><VAR>opzioni</VAR><STRONG><BIG>]</BIG></STRONG><VAR>file</VAR>...
</TT></P>

<P>Il compito normale di <SAMP>fuser</SAMP> &egrave; quello di elencare i processi che utilizzano i file indicati come argomento. In alternativa, <SAMP>fuser</SAMP> permette anche di inviare un segnale ai processi che utilizzano un gruppo di file determinato, attraverso l'opzione <SAMP>-k</SAMP>. <SAMP>fuser</SAMP> &egrave; gi&agrave; stato descritto nella sezione <A HREF="a252.html#anchor693">34.2.1</A>.</P>
Appunti di informatica libera 2001.08.18  --- <EM>Copyright &copy; 2000-2001 Daniele Giacomini -- &nbsp;daniele&nbsp;@&nbsp;swlibero.org</EM></DIV>
<HR>
<P>Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome  <A HREF="invio_di_segnali_ai_processi.html">invio_di_segnali_ai_processi.html</A></P>
<P>
<A HREF="a254.html">[successivo]</A>
<A HREF="a252.html">[precedente]</A>
<A HREF="a2.html">[inizio]</A>
<A HREF="a2506.html">[fine]</A>
<A HREF="a21.html">[indice generale]</A>
<A HREF="a26.html">[violazione GPL]</A>
<A HREF="a2504.html">[licenze]</A>
<A HREF="a2505.html">[indice analitico]</A>
</P>
</BODY>
</HTML>