Question

Je ne suis pas familier avec le développement de Linux C.

Mon code:

....

if((pid=fork())==0){
  //child process
  //start a process, may be need to change execv to other call
  execv (workdir , args);
}else if (pid<0){
  ...
}else{
  ...
}

Ce que je veux faire est de revenir immédiatement à partir du processus de démarrage de nouveau processus en matière d'enfants.

Parce que dans le programme Current, execv (workdir , args); ne reviendra pas.(Je dois commencer un long processus de course).

Ce que je veux faire est de démarrer ce processus à long terme et de revenir immédiatement dans mon code C, de sorte que mon programme C puisse quitter.

Comment puis-je faire cela? Peut-être faites-le peut-être que mon nouveau processus enfant a commencé un démon, comment le faire par API Call?

Était-ce utile?

La solution

Something like this:

close(0); open("/dev/null", 0);
close(1);

if(open("/dev/null", O_WRONLY) < 0) {
    perror("/dev/null");
    exit(1);
}

switch(pid = fork()) {
    case -1:
        perror(argv[0]);
        exit(1);
        break;
    case 0:
        fflush(stdout);
        close(2); dup(1);
        setpgrp();
        setsid();
        execv(argv[0], argv);
        execvp(argv[0], argv);
        perror(argv[0]);
        _exit(1);
        break;
    default:
        exit(0);
        break;
}

Will fork and detach a process, and exit. It "daemonizes" the program.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top