Ik ben voor linux/openbsd/netbsd een traffic monitoring tooltje aan het maken in c.
Dit bestaat uit twee delen: Een client die een aantal interfaces op een computer in de gaten houdt en de traffic logt naar een server programma en een server programma die de ontvangen data logt in een database.
Ik wil dat deze programma's op de achtergrond draaien. Nu werkt dat op zich wel, maar nog niet echt lekker.
Als ik het programma opstart, dan gaat ie naar de achtergrond toe en alles lijkt goed te gaan. In ps kan ik zien dat het process geen terminals meer heeft.
Maar als ik dan het terminal scherm afsluit dan blijft deze hangen om de een of andere reden. (ik gebruik putty vanuit windows om op een linux computer te editten) Ik moet putty echt afsluiten door hem te killen. Als ik mijn programma niet opstart dan is er niets aan de hand en sluit putty normaal af.
Dus het 'daemonizen' gaat niet goed.
Ik gebruik er nu de volgende code voor:
Dit komt vrijwel rechtstreeks uit een faq. Iemand een idee waarom dit niet goed gaat??
Dit bestaat uit twee delen: Een client die een aantal interfaces op een computer in de gaten houdt en de traffic logt naar een server programma en een server programma die de ontvangen data logt in een database.
Ik wil dat deze programma's op de achtergrond draaien. Nu werkt dat op zich wel, maar nog niet echt lekker.
Als ik het programma opstart, dan gaat ie naar de achtergrond toe en alles lijkt goed te gaan. In ps kan ik zien dat het process geen terminals meer heeft.
Maar als ik dan het terminal scherm afsluit dan blijft deze hangen om de een of andere reden. (ik gebruik putty vanuit windows om op een linux computer te editten) Ik moet putty echt afsluiten door hem te killen. Als ik mijn programma niet opstart dan is er niets aan de hand en sluit putty normaal af.
Dus het 'daemonizen' gaat niet goed.
Ik gebruik er nu de volgende code voor:
code:
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
| if(!fork())
{
if(setsid() == -1)
{
LOG("Error: setsid() failed");
}
else
{
if(!fork())
{
chdir("/");
umask(0);
fclose(stdin);
fclose(stdout);
setvbuf(stdout, (char *)NULL, _IOLBF, 0);
LOG("Becoming daemon");
}
else
{
LOG("Getting to background (1)");
return 0;
}
}
}
else
{
LOG("Getting to background (2)");
return 0;
}
// Vanaf hier is het programma een daemon geworden |
Dit komt vrijwel rechtstreeks uit een faq. Iemand een idee waarom dit niet goed gaat??
[ Voor 3% gewijzigd door thrax op 15-10-2003 22:41 ]
"Ore wa bakemono? Che, ore wa akuma da!"