pille710
23-07-2006, 15:44
Hallo,
ich habe ein kleines Verständisproblem bei folgendem Codefetzen:
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <syslog.h>
#include <string.h>
int main(void) {
pid_t pid, sid;
pid = fork();
if (pid < 0) {
exit(EXIT_FAILURE);
}
if (pid > 0) {
exit(EXIT_SUCCESS);
}
umask(0);
sid = setsid();
if (sid < 0) {
exit(EXIT_FAILURE);
}
if ((chdir("/")) < 0) {
exit(EXIT_FAILURE);
}
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
while (1) {
sleep(30);
}
exit(EXIT_SUCCESS);
}
Ich habe das hier (http://www.linuxprofilm.com/articles/linux-daemon-howto.html) gefunden, da ich mich ein etwas mit Daemons beschäftigen wollte, und eigentlich ist mir auch alles soweit klar, bis auf die von mir rot hervorgehobene Zeile
sid = setsid();
Im verlinkten how-to steht dass der neu geforkte Prozess (ein "Kind"prozess ohne Elterprozess, wenn ich das richtig verstanden habe, da der Elternprozess beendet wird) eine neue Session ID braucht um nicht zu verwaisen. Leider ist mir jetzt die SID nicht ganz klar, wo liegt da der Unterschied zur Process ID? Fasst eine Session ID z.B. Prozessgruppen wie "Vater - Kind 1 - Kind 2 - Kind 3" zusammen? Bei meiner googlesuche bin ich leider nur auf Session IDs im Zusammenhang mit PHP gestoßen, ich denke mal das hat damit nichts zu tun. Was mich jetzt stark verwundert ist dass es für mich (augenscheinlich) keinen Unterschied macht ob ich das Programm nun mit oder ohne der sid = setsid(); Zeile starte, es beendet sich in keinem Falle und hat immer den State "S".
Sorry wenn das ganze etwas wirr klingt, mir fehlt da leider noch etwas das Verständis.
Meine konkrete Frage ist es wozu ich in diesem Codeteil die setsid(); Zeile brauche und was sich grob gesagt hinter der SID verbirgt, über einen Link wäre ich da dankbar.
Besten Dank schonmal im vorraus.
ich habe ein kleines Verständisproblem bei folgendem Codefetzen:
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <syslog.h>
#include <string.h>
int main(void) {
pid_t pid, sid;
pid = fork();
if (pid < 0) {
exit(EXIT_FAILURE);
}
if (pid > 0) {
exit(EXIT_SUCCESS);
}
umask(0);
sid = setsid();
if (sid < 0) {
exit(EXIT_FAILURE);
}
if ((chdir("/")) < 0) {
exit(EXIT_FAILURE);
}
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
while (1) {
sleep(30);
}
exit(EXIT_SUCCESS);
}
Ich habe das hier (http://www.linuxprofilm.com/articles/linux-daemon-howto.html) gefunden, da ich mich ein etwas mit Daemons beschäftigen wollte, und eigentlich ist mir auch alles soweit klar, bis auf die von mir rot hervorgehobene Zeile
sid = setsid();
Im verlinkten how-to steht dass der neu geforkte Prozess (ein "Kind"prozess ohne Elterprozess, wenn ich das richtig verstanden habe, da der Elternprozess beendet wird) eine neue Session ID braucht um nicht zu verwaisen. Leider ist mir jetzt die SID nicht ganz klar, wo liegt da der Unterschied zur Process ID? Fasst eine Session ID z.B. Prozessgruppen wie "Vater - Kind 1 - Kind 2 - Kind 3" zusammen? Bei meiner googlesuche bin ich leider nur auf Session IDs im Zusammenhang mit PHP gestoßen, ich denke mal das hat damit nichts zu tun. Was mich jetzt stark verwundert ist dass es für mich (augenscheinlich) keinen Unterschied macht ob ich das Programm nun mit oder ohne der sid = setsid(); Zeile starte, es beendet sich in keinem Falle und hat immer den State "S".
Sorry wenn das ganze etwas wirr klingt, mir fehlt da leider noch etwas das Verständis.
Meine konkrete Frage ist es wozu ich in diesem Codeteil die setsid(); Zeile brauche und was sich grob gesagt hinter der SID verbirgt, über einen Link wäre ich da dankbar.
Besten Dank schonmal im vorraus.