File: processen.html

package info (click to toggle)
doc-linux-nl 20051127-2
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 16,408 kB
  • ctags: 94
  • sloc: xml: 47,403; makefile: 312; perl: 193; sh: 116; ansic: 12; csh: 9
file content (489 lines) | stat: -rw-r--r-- 13,851 bytes parent folder | download | duplicates (2)
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
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
<HTML
><HEAD
><TITLE
>Processen</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.64
"><LINK
REL="HOME"
TITLE="Het Slackware Handboek"
HREF="slackware-handboek.html"><LINK
REL="PREVIOUS"
TITLE="Bestanden en directories"
HREF="bestandssysteem.html"><LINK
REL="NEXT"
TITLE="Netwerktools"
HREF="netwerk.html"><LINK
REL="STYLESHEET"
TYPE="text/css"
HREF="normal.css"></HEAD
><BODY
CLASS="chapter"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>Het Slackware Handboek: Voor Slackware Linux 9.1</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="bestandssysteem.html"
>Terug</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="netwerk.html"
>Volgende</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="chapter"
><H1
><A
NAME="AEN598"
>Hoofdstuk 11. Processen</A
></H1
><DIV
CLASS="TOC"
><DL
><DT
><B
>Inhoudsopgave</B
></DT
><DT
>11.1. <A
HREF="processen.html#AEN600"
>Inleiding</A
></DT
><DT
>11.2. <A
HREF="processen.html#AEN605"
>Voorgrond processen</A
></DT
><DT
>11.3. <A
HREF="processen.html#AEN624"
>Achtergrond processen</A
></DT
><DT
>11.4. <A
HREF="processen.html#AEN634"
>ps</A
></DT
><DT
>11.5. <A
HREF="processen.html#AEN649"
>Signalen</A
></DT
><DT
>11.6. <A
HREF="processen.html#AEN666"
>Top</A
></DT
></DL
></DIV
><DIV
CLASS="sect1"
><H1
CLASS="sect1"
><A
NAME="AEN600"
>11.1. Inleiding</A
></H1
><P
>&#13;Elk programma wat gestart wordt is in wezen een proces. Het kan voorkomen dat een gestart programma zichzelf in meerdere taken verdeelt. In zo'n geval worden er meerdere processen gestart. Een voorbeeld van een programma dat zich in meerdere 'sub' taken verdeeld in de apache web server. Je ziet dan meerdere processen met dezelfde naam, in dit geval httpd. 
Onder de noemer programma kun je in dit geval zowel een systeem programma (ook wel daemon genoemd) verstaan als een programma die je als "gewone" gebruiker start, zoals je email programma. Dus elk gestart programma start als het ware een of meerdere processen op.
</P
><P
>&#13;Elk proces is gekoppeld aan een gebruiker. Zo kunnen er bijvoorbeeld processen zijn die aan de root gebruiker zijn gekoppeld en processen die je zelf hebt gestart en die dus gekoppeld zijn aan jezelf.
</P
><P
>&#13;Processen kunnen op meerdere manieren actief zijn. Voorbeeld daarvan zijn processen die op de voorgrond of op de achtergrond lopen. 
</P
></DIV
><DIV
CLASS="sect1"
><H1
CLASS="sect1"
><A
NAME="AEN605"
>11.2. Voorgrond processen</A
></H1
><P
>&#13;Een voorgrond proces is bijvoorbeeld een programma wat een gebruiker start vanuit een shell, bijvoorbeeld een email programma of een editor. Een typerend kenmerk van een voorgrond proces is dat het toetsenbord en beeldscherm gekoppeld zijn aan dat voorgrond proces. Er wordt in dit geval ook wel gesproken van 'Controling Terminal'. 
</P
><P
>&#13;Een proces kan in de voorgrond gestart worden door vanuit de shell prompt een opdracht of programma naam in te typen. Voorbeeld:
</P
><PRE
CLASS="screen"
>&#13;$ <B
CLASS="command"
>vi</B
>
</PRE
><P
>&#13;Bovenstaand voorbeeld start de vi editor in de voorgrond (foreground). 
</P
><P
>&#13;Je kunt, als een voorgrond proces eenmaal gestart is, deze naar de achtergrond verbannen. Om een proces wat als voorgrond proces gestart is naar de achtergrond te verplaatsen, gebruik je de toetsen combinatie Crtl-Z. Op deze manier zet je het proces naar de achtergrond in de wacht. Hierna gebruik je het commando 'bg' om het proces verder op de achtergrond te laten lopen. Je kunt met het commando <B
CLASS="command"
>jobs</B
> een overzicht krijgen van taken die vanuit de shell gestart zijn:
</P
><PRE
CLASS="screen"
>&#13;$ <B
CLASS="command"
>jobs</B
>
</PRE
><P
>&#13;De output zou als volgt kunnen zijn:
</P
><PRE
CLASS="screen"
>&#13;[1]-	Stopped		vi
[2]	Running		xmms &#38;
[3]+	Stopped		top		
</PRE
><P
>&#13;In bovenstaand voorbeeld zie je drie processen die vanuit de shell gestart zijn. Het proces (lees : job) xmms loopt zoals je ziet in de achtergrond. De andere twee staan te wachten. Je kunt een wachtend proces of een proces wat in de achtergrond draait naar de voorgrond halen. Zoals je ziet heeft elk proces een nummer. Dit zijn in dit geval geen proces id's, maar een soort van 'job nummers'. Als je nu de job xmms weer naar de voorgrond wil halen dan kun je dit als volgt doen:
</P
><PRE
CLASS="screen"
>&#13;$ <B
CLASS="command"
>fg 2</B
>
</PRE
><P
>&#13;Met bovenstaand commando haalt je het achtergrond proces met 'job' nummer 2 weer naar de voorgrond (met het commando <B
CLASS="command"
>fg</B
>). Het - teken in de lijst van de output van het <B
CLASS="command"
>job</B
> commando staat voor het laatst gestart proces en het + teken voor het voorlaatst gestarte proces.
</P
></DIV
><DIV
CLASS="sect1"
><H1
CLASS="sect1"
><A
NAME="AEN624"
>11.3. Achtergrond processen</A
></H1
><P
>&#13;Een achtergond proces is een proces wat niet gekoppeld is aan het toetsenbord en beeldscherm. Dit proces is wel actief, alleen dat lopende proces is niet te "zien" via je beeldscherm.
</P
><P
>&#13;Een proces kun je als volgt in de achtergrond starten:
</P
><PRE
CLASS="screen"
>&#13;$ <B
CLASS="command"
>xmms &#38;</B
>
</PRE
><P
>&#13;Het ampersand (&#38;) teken wordt gebruikt om een proces in de achtergrond te starten. Als je nu het commando <B
CLASS="command"
>jobs</B
> gebruikt zie je dat een proces in de achtergrond verder loopt. Let wel : dit geldt niet voor elk proces. Er zijn programma's die in de achtergrond alleen in de wacht gezet kunnen worden. Een voorbeeld hiervan is de editor vi, welke alleen gesuspend (in de wacht gezet) kan worden. 
</P
><PRE
CLASS="screen"
>&#13;[1] 	Running		sleep 10000 &#38;	
[2] 	Running		xmms &#38;
[3]	Stopped		vi
</PRE
><P
>&#13;Zoals je ziet is de status van twee jobs running en die van vi stopped terwijl ze alledrie op dezelfde manier gestart zijn (met het '&#38;' teken).
</P
></DIV
><DIV
CLASS="sect1"
><H1
CLASS="sect1"
><A
NAME="AEN634"
>11.4. ps</A
></H1
><P
>&#13;Het commando <B
CLASS="command"
>ps</B
>(1) gebruik je om een overzicht te 
krijgen van processen
onafhankelijk of ze in de voorgrond of achtergrond draaien. Elk proces
krijgt een nummer toegewezen, een zogenaamd proces id. Dit proces id,
ook wel PID genoemd, kan erg nuttig zijn om te weten. Het commando
<B
CLASS="command"
>ps</B
> kent verschillende opties die je mee kunt
geven. Als je geen opties mee geeft, dan krijg je alleen een lijst van
de processen die door je zelf gestart zijn. Voorbeeld:

</P
><PRE
CLASS="screen"
>&#13;$ <B
CLASS="command"
>ps</B
>
PID	TTY	TIME		CMD
12	pts/1	00:00:00	bash
15	pts/1	00:00:00	vi
</PRE
><P
>&#13;In bovenstaand voorbeeld staat PID voor het proces ID, TTY is de
terminal die bij dit proces hoort, TIME geeft de gebruikte CPU tijd
aan tot op heden en CMD staat voor de naam van het gestarte programma.
Als je dit commando uitbreid met een aantal opties, bijvoorbeeld de
opties a, u en x als volgt: </P
><PRE
CLASS="screen"
>&#13;$ <B
CLASS="command"
>ps -aux</B
>
</PRE
><P
>&#13;dan kan de output er als volgt uitzien:
</P
><PRE
CLASS="screen"
>&#13;USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   448   64 ?        S    12:21   0:03 init
root         2  0.0  0.0     0    0 ?        SW   12:21   0:00 [keventd]
root         3  0.0  0.0     0    0 ?        SW   12:21   0:00 [kapmd]
root         4  0.0  0.0     0    0 ?        SWN  12:21   0:00 [ksoftirqd_CPU0]
root         5  0.0  0.0     0    0 ?        SW   12:21   0:01 [kswapd]
root         6  0.0  0.0     0    0 ?        SW   12:21   0:00 [bdflush]
root         7  0.0  0.0     0    0 ?        SW   12:21   0:00 [kupdated]
root         8  0.0  0.0     0    0 ?        SW   12:21   0:00 [kinoded]
root         9  0.0  0.0     0    0 ?        SW&#60;  12:21   0:00 [mdrecoveryd]
</PRE
><P
>&#13;Zie de manual page van het <B
CLASS="command"
>ps</B
> commando voor meer uitleg 
(<B
CLASS="command"
>man ps</B
>).
</P
></DIV
><DIV
CLASS="sect1"
><H1
CLASS="sect1"
><A
NAME="AEN649"
>11.5. Signalen</A
></H1
><P
>&#13;Met het commando <B
CLASS="command"
>kill</B
>(1) kun je processen be&iuml;nvloeden. Dit commando kun je gebruiken om processen te stoppen, maar bijvoorbeeld ook om ze te herstarten. Om processen te be&iuml;nvloeden die van een andere gebruiker zijn, moet je dit commando als root gebruiker uitvoeren. Je kunt wel als gewone gebruiker je eigen processen be&iuml;nvloeden.
</P
><P
>&#13;Bij het commando KILL draait het eigenlijk om het sturen van een signaal naar een proces. Je kunt verschillende signalen naar een proces sturen en standaard wordt het TERM signaal naar een proces gestuurd wat in feite zegt: proces be&euml;indig je zelf. Hieronder volgt een overzicht van een aantal verschillende signalen die je naar een proces kan sturen.
</P
><PRE
CLASS="screen"
>&#13; 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	17) SIGCHLD
</PRE
><P
>&#13;De meest gebruikte signalen zijn TERM voor stoppen, KILL als een proces hardhandig de nek omgedraaid moet worden en HUP als een proces herstart moet worden. Dus als een proces het signaal HUP (hang-up) ontvangt, zal dit proces zich herstarten.
</P
><P
>&#13;Niet alle signalen worden door het proces zelf verwerkt. Als een proces zelf nergens meer op reageert kun je deze met een SIGKILL stoppen. Dit signaal wordt door de kernel verwerkt. 
</P
><P
>&#13;Zoals je misschien opgevallen is, beginnen alle signalen met de letters SIG. Als je een signaal wilt versturen naar een proces, dan kun je dit als volgt doen:
</P
><PRE
CLASS="screen"
>&#13;$ <B
CLASS="command"
>kill -optie PID</B
>
</PRE
><P
>&#13;Op de plaats van 'optie' plaats je een deel van een signaal wat je wilt versturen. Stel je wilt een SIGTERM versturen, dan vul je op de plaats van de optie het woord TERM in. Op de plaats van PID vul je het proces ID in, welke je op kunt zoeken met het PS commando.
</P
><P
>&#13;Overigens kun je in plaats van de woorden TERM, HUP en dergelijke ook met getallen werken. Met het commando <B
CLASS="command"
>kill -l</B
> zie je een lijst van de signalen met de bijbehorende getallen. Het commando wordt dan:
</P
><PRE
CLASS="screen"
>&#13;$ <B
CLASS="command"
>kill -1 xmms</B
>
</PRE
><P
>&#13;Bovenstaand commando stuurt een boodschap naar het proces dat hij zichzelf moet herstarten (HUP).
</P
></DIV
><DIV
CLASS="sect1"
><H1
CLASS="sect1"
><A
NAME="AEN666"
>11.6. Top</A
></H1
><P
>&#13;Het commando <B
CLASS="command"
>top</B
>(1) kun je gebruiken om dynamische
informatie over processen te zien. Dynamisch in de zin dat je direct
veranderingen kunt zien, bijvoorbeeld t.a.v. CPU verbruik, hoeveel
processen er actief zijn en dergelijke. Dit commando voer je als volgt
uit: </P
><PRE
CLASS="screen"
>&#13;$ <B
CLASS="command"
>top</B
>
</PRE
><P
>&#13;De uitvoer van dit programma kan er als volgt uitzien:
</P
><PRE
CLASS="screen"
>&#13;  9:18pm  up  8:57,  7 users,  load average: 0.03, 0.05, 0.06
73 processes: 71 sleeping, 1 running, 0 zombie, 1 stopped
CPU states:  3.7% user,  0.7% system,  0.0% nice, 95.4% idle
Mem:   223152K av,  190712K used,   32440K free,       0K shrd,    4920K buff
Swap:  104412K av,   13028K used,   91384K free                  119232K cached

  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME COMMAND
14678 neskio    19   0   980  980   764 R     2.7  0.4   0:00 top
    1 root      20   0    76   64    44 S     0.0  0.0   0:03 init
    2 root      20   0     0    0     0 SW    0.0  0.0   0:00 keventd
    3 root      20   0     0    0     0 SW    0.0  0.0   0:00 kapmd
    4 root      20  19     0    0     0 SWN   0.0  0.0   0:00 ksoftirqd_CPU0
    5 root      20   0     0    0     0 SW    0.0  0.0   0:01 kswap
    6 root      20   0     0    0     0 SW    0.0  0.0   0:00 bdflush
    7 root      20   0     0    0     0 SW    0.0  0.0   0:00 kupdated
    8 root      20   0     0    0     0 SW    0.0  0.0   0:00 kinoded
    9 root       0 -20     0    0     0 SW&#60;   0.0  0.0   0:00 mdrecoveryd
  380 root      20   0   256  216   144 S     0.0  0.0   0:00 syslogd
  383 root      20   0   672  172   116 S     0.0  0.0   0:00 klogd
  419 root      20   0     0    0     0 SW    0.0  0.0   0:00 khubd
  605 root      19   0   188    4     4 S     0.0  0.0   0:00 cardmgr
  618 bin       20   0   224  192   136 S     0.0  0.0   0:00 portmap
  665 root      18   0   252    4     4 S     0.0  0.0   0:00 sshd
  696 at        20   0   152  100    64 S     0.0  0.0   0:00 atd
  719 lp        20   0   548  520   424 S     0.0  0.2   0:00 lpd
  761 root      20   0   172  112    76 S     0.0  0.0   0:00 cron
  779 mail      20   0   816  308   216 S     0.0  0.1   0:00 sendmail
  785 root      20   0   972  364   232 S     0.0  0.1   0:00 sendmail
  863 root      20   0   448  416   296 S     0.0  0.1   0:00 nscd
  868 root      20   0   448  416   296 S     0.0  0.1   0:00 nscd
</PRE
></DIV
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="bestandssysteem.html"
>Terug</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="slackware-handboek.html"
>Begin</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="netwerk.html"
>Volgende</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>Bestanden en directories</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Netwerktools</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>