Pascal vraagt het zich al af: "Rebooten, kan Linux dat dan".

Het antwoord is "Ja", echter vaak kan je volstaan met het herstarten van een programma.

Het komt wel eens voor dat je een daemon opnieuw moet starten omdat het conguratie bestand alleen bij het starten van het programma gelezen wordt (voorbeelden hiervan zijn inetd, httpd, syslogd maar er zijn er veel meer).
Je kunt dan uiteraard rebooten zoals bij sommige andere OSen. Dat werkt echter niet echt prettig, bovendien heeft Linux een mechanisme in huis om dit soort dingen te regelen. En dat is process management.

Alhoewel er vast wel X applicaties zijn die dit allemaal kunnen gebruik ik altijd de console voor dit soort acties. En wel de volgende programma's (samen met wat *nix fit-werk):

ps:
Uit de manpage
PS(1)                  Linux User's Manual                  PS(1)

NAME
       ps - report process status

SYNOPSIS
       ps [options]

DESCRIPTION
       ps  gives a snapshot of the current processes. If you want
       a repetitive update of this status, use top. This man page
       documents the /proc-based version of ps, or tries to.
        

Een van de dingen die ps kan raporteren over draaiende processen is de PID. Ik gebruik daar altijd de optie -e voor:
       -e           select all processes
        

Een voorbeeld van z'n output is bijvoorbeeld:
bilbo@bilbo:~$ ps -e
  PID TTY          TIME CMD
    1 ?        00:00:04 init
    2 ?        00:00:00 keventd
    3 ?        00:00:00 ksoftirqd_CPU0
    4 ?        00:00:00 kswapd
    5 ?        00:00:00 bdflush
    6 ?        00:00:00 kupdated
    7 ?        00:00:00 mdrecoveryd
    8 ?        00:00:00 kreiserfsd
   21 ?        00:00:00 loop0
   22 ?        00:00:00 loop1
   36 ?        00:00:00 khubd
   55 ?        00:00:00 dhcpcd
   64 ?        00:00:00 named
  184 ?        00:00:00 syslogd
  187 ?        00:00:00 klogd
  189 ?        00:00:00 inetd
  191 ?        00:00:00 fetchmail
  203 ?        00:00:00 lpd
  206 ?        00:00:00 crond
  209 ?        00:00:00 atd
  212 ?        00:00:00 sendmail
  215 ?        00:00:00 sendmail
  220 ?        00:00:00 httpd
  222 ?        00:00:00 gpm
  224 tty1     00:00:00 agetty
  225 tty2     00:00:00 bash
  226 tty3     00:00:00 agetty
  227 tty4     00:00:00 agetty
  228 tty5     00:00:00 agetty
  229 tty6     00:00:00 agetty
  230 ?        00:00:00 httpd
  231 ?        00:00:00 httpd
  232 ?        00:00:00 httpd
  233 ?        00:00:00 httpd
  234 ?        00:00:00 httpd
  245 tty2     00:00:00 startx
  252 tty2     00:00:00 xinit
  253 ?        00:00:10 X
  257 tty2     00:00:00 xinitrc
  262 tty2     00:00:00 bbmail
  263 tty2     00:00:00 blackbox
  269 ?        00:00:09 mozilla-bin
  296 ?        00:00:00 mozilla-bin
  297 ?        00:00:00 mozilla-bin
  298 ?        00:00:00 mozilla-bin
  300 ?        00:00:00 mozilla-bin
  307 ?        00:00:00 httpd
  311 ?        00:00:00 rxvt
  312 pts/0    00:00:00 bash
  328 ?        00:00:00 mozilla-bin
  330 pts/0    00:00:00 ps
bilbo@bilbo:~$
        

Dit zijn dus alle processen op mijn systeem die draaien op het moment dat ik commandp `ps -e` geef.

Andere mensen gebruiken andere opties voor ps. Maar dit volstaat voor mij. Bovendien is dat waar GNU Linux om draait.... vrijheid!

Ik heb bewust niet ge-snipt in de lijst om aan te geven dat het er vrij veel zijn. Vaak scrolt de lijst van je scherm.

Vandaar ook dat......

grep:
Uit de manpage
GREP(1)                                                   GREP(1)

NAME
       grep, egrep, fgrep - print lines matching a pattern

SYNOPSIS
       grep [options] PATTERN [FILE...]
       grep [options] [-e PATTERN | -f FILE] [FILE...]

DESCRIPTION
       Grep  searches  the named input FILEs (or standard input if no files
       are named, or the file name - is given) for lines containing a match
       to the given PATTERN.  By default, grep prints the matching lines.
        

Grep is een programma met veel krachtige opties. Voor ons doel echter volstaat de default aktie van grep: het printen van regels die overeenkomen. We moeten uitsluitend zoeken naar een patroon in een aantal regels.
We zouden dit kunnen doen door de output van `ps -e` tijdelijk op te slaan in een bestand. Ook dit is echter weer niet de *nix manier van zaken doen.
Het is tijd om een *nix loodgieter te worden..... we gaan pipen (spreekt uit paipen).
Grep kan in plaats van een bestand ook de standaar input gebruiken als invoer. En dit kan heel gemakkelijk de uitvoer van een ander programma zijn, bijvoorbeeld `ps -e`.
Om de output van het ene programma te pipen naar een volgend programma wordt het pipe symbool, | (meestal 2 vertikale streepjes op je toetsenbord), te gebruiken.
Stel ik ben op zoek naar het PID van inetd, dan geef ik het commando `ps -e|grep inetd`. Dit levert de volgende output op:
bilbo@bilbo:~$ ps -e | grep inetd
  189 ?        00:00:00 inetd
bilbo@bilbo:~$
        

En voila, daar staat het PID van indetd.

Vervolgens kun je nu dus.....

kill:
Uit de manpage
KILL(1)                Linux User's Manual                KILL(1)

NAME
       kill - send a signal to a process

SYNOPSIS
       kill pid ...             Send SIGTERM to every process listed.
       kill signal pid ...      Send a signal to every process listed.
       kill -s signal pid ...   Send a signal to every process listed.
       kill -l                  List all signal names.
       kill -l signal           Convert a signal number into a name.

DESCRIPTION
       The  default signal for kill is TERM. Use -l or -L to list available
       signals.  Particularly useful signals include HUP, INT, KILL,  STOP,
       CONT,  and  0.  Alternate signals may be specified in three ways: -9
       -SIGKILL -KILL.
        

Kill stuurt dus een bepaalt signaal naar een process wat geindentificeert wordt door een PID. Het standaart signaal is TERM, en die hebben wij dus niet nodig.

De manpage geeft de volgende signaal mogelijkheden:
SIGNALS
       The signals listed below may be available for use with  kill.   When
       known constant, numbers and default behavior are shown.

       Name     Num   Action    Description
       ()                                                             ()

       ALRM      14   exit
       HUP        1   exit
       INT        2   exit
       KILL       9   exit      this signal may not be blocked
       PIPE      13   exit
       POLL           exit
       PROF           exit
       TERM      15   exit
       USR1           exit
       USR2           exit
       VTALRM         exit
       STKFLT         exit      may not be implemented
       PWR            ignore    may exit on some systems
       WINCH          ignore
       CHLD           ignore
       URG            ignore
       TSTP           stop      may interact with the shell
       TTIN           stop      may interact with the shell
       TTOU           stop      may interact with the shell
       STOP           stop      this signal may not be blocked
       CONT           restart   continue if stopped, otherwise ignore
       ABRT       6   core
       FPE        8   core
       ILL        4   core
       QUIT       3   core
       SEGV      11   core
       TRAP       5   core
       SYS            core      may not be implemented
       EMT            core      may not be implemented
       BUS            core      core dump may fail
       XCPU           core      core dump may fail
       XFSZ           core      core dump may fail
        

Het signaal wat wij nodig hebben is HUP. Dit kan aangeroepen worden met de optie -HUP, -SIGHUP of -1, zelf gebruik ik altijd -HUP.

Om inetd opnieuw het configuratie bestand te laten lezen moet ik dus het commando `kill -HUP 189`. De output van dit commando is niet opzienbarend:
bilbo@bilbo:~$ kill -HUP 189
bash: kill: (189) - Operation not permitted
bilbo@bilbo:~$
        

Oeps, je moet natuurlijk wel root zijn om dit te kunnen doen:
bilbo@bilbo:~$ su
Password:
root@bilbo:/home/bilbo# kill -HUP 189
root@bilbo:/home/bilbo# exit
exit
bilbo@bilbo:~$
        

That's it, incl een su naar root en een exit weer terug naar bilbo.

Meer is het niet!
Synopsis:
bilbo@bilbo:~$ ps -e | grep inetd
  189 ?        00:00:00 inetd
bilbo@bilbo:~$ su
Password:
root@bilbo:/home/bilbo# kill -HUP 189
root@bilbo:/home/bilbo# exit
exit
bilbo@bilbo:~$
        

Of is er wel meer?

Sommige processen reageren niet goed op het signaal -HUP. Ze sterven simpelweg af en komen niet meer terug. Is geen drama, je kunt het process altijd wel weer starten.
Maar het motto is wel dat je na een -HUP ff met `ps -e | grep [naam]` moeten kijken of het process weer draait.

Je zou nog meer loodgieterswerk kunnen gebruiken door de output van grep te pipen naar cut, en de output van cut vervolgens te pipen naar kill. Persoonlijk doe ik dit nooit om een process te herstarten, want.
Dit kan problemen opleveren. Neem bijvoolbeeld de httpd daemon.

Als je ps de optie --forest meegeeft, dan krijg je een soort van ASCII grafische weergave van de processen:
bilbo@bilbo:~$ ps -e --forest|grep httpd
  220 ?        00:00:00 httpd
  230 ?        00:00:00  \_ httpd
  231 ?        00:00:00  \_ httpd
  232 ?        00:00:00  \_ httpd
  233 ?        00:00:00  \_ httpd
  234 ?        00:00:00  \_ httpd
  307 ?        00:00:00  \_ httpd
bilbo@bilbo:~$
        

Je ziet dan dat er meerdere instanties van httpd actief zijn. Het moederprocess met het PID 220, 5 kinderen met de PIDs 230 t/m 234 die wachten op een verbinding, en 1 actieve sessie met PID 307.

Welke moet je nu herstarten?

Je zou het PID wat je moet herstarten kunnen opzoeken in de directorie /var/run. Apache maakt het je echter gemakkelijk, er is een tooltje speciaal om apache te herstarten: apachectl.
Deze tool geef je de optie -restart mee, en vervolgens zal httpd opnieuw starten.
root@bilbo:~# apachectl restart
/usr/sbin/apachectl restart: httpd restarted
root@bilbo:~#
        

In feite is apachectl een shell script wat de juiste PID opzoekt in /var/run en dit vervolgens gebruikt voor het herstarten. Bekijk het script maar eens als je tijd hebt.