ich eine Situation wie diese haben:Starten asynchrone Prozesse unter Verwendung von C in * nix
start();
<Some code>
end();
Ich möchte start()
Funktion einen Prozess (nicht separate Threads) zu starten, die etwas asynchron tut (durch, dass ich sofort nach dem Laichen bedeuten der Prozess, das Steuerelement sollte zurück zum übergeordneten und der erzeugte Prozess in 'Hintergrund') mit dem übergeordneten Prozess, und dann nach <Some code>
Block endet, end()
Funktion wäre kill
die Prozess-ID mit start()
verbunden. Ich bin nicht sicher, wie dies zu tun ist, vor allem der Teil, um Eltern- und Kind-Code-Blöcke asynchron zu machen; Hilfe benötigen. Vielen Dank.
EDIT: Nachdem ich Hilfe von den Mitgliedern bekommen habe, konnte ich diesen Code schreiben, aber das hat Probleme, es wäre toll, wenn jemand auf die Fehler hinweisen könnte. Alles, was ich für _do_()
will ist, einen Kindprozess zu initiieren, der nie enden könnte, wenn _stop_()
es nicht töten kann. Aber aus irgendeinem Grund geht der Elternprozess verloren und das Programm läuft unbegrenzt auf der while()
Schleife.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <signal.h>
#include <errno.h>
pid_t id = 0;
int _do_()
{
//int status;
pid_t childpid; /* variable to store the child's pid */
FILE *fp= NULL;
childpid = fork();
//child stuff
if (childpid == 0)
{
id = getpid();
fp = fopen ("Log.txt", "w+");
while (1)
{
fprintf(fp, "Logging info...\n");
fflush(fp);
}
fclose(fp);
}
if (childpid < 0) /* fork returns -1 on failure */
{
perror("fork"); /* display error message */
exit(-1);
}
return 0;
}
//kill child process in _do_()
int _stop_()
{
int en;
printf("Going to kill child ID: %d\n", id);
if (kill (id , SIGKILL) < 0)
{
en = errno;
printf("Error while trying to KILL process: %s\n", strerror(en));
}
printf("Logging ended\n");
return 0;
}
int main(int argc, char* argv[])
{
int i;
_do_();
for (i = 0; i < 200; i++)
;
_stop_();
printf("\nEnded...\n");
return 0;
}
EDIT2: Ich konnte nicht das tun, was ich wollte, ein Prozess, bei start()
von end()
begann zu töten, anstatt einen Daemon-Prozess gestartet und lassen Sie es Werte Dump auf eine Datei, bis die Dateigröße bis zu einem gewissen vorgegebenen Grenzwert erreicht . Dies ist das nächste, was ich wollte.
Welches Betriebssystem? –
Siehe [diese SO-Frage] (http://stackoverflow.com/q/7794273/960195) - es enthält den Code, um 'start' zu implementieren, und es fragt nach dem Code für' end'. –
Linux-Systeme ... – Sayan