Comment est-ce que j’exécute () un processus en arrière-plan en C?

J’ai fait un fork et un exec () sur un processus, mais j’aimerais le lancer en arrière-plan. Comment puis-je faire ceci? Je peux simplement éviter d’appeler waitpid dessus, mais le processus restra toujours là, attendant de retourner son statut au parent. Y a-t-il un autre moyen de faire cela?

Catch SIGCHLD et dans le gestionnaire, appelez wait ().

Certaines versions de Posix (* BSD, mais ne me citez pas), si vous ignorez SIGCHLD, le kernel nettoie automatiquement le processus zombie (ce que vous voyez dans ps). C’est une fonctionnalité intéressante mais pas portable.

Je pense que ce que vous essayez de faire est de créer un processus démon. Lisez ce lien sur Wikipedia pour une explication.

Voici un exemple (tiré de la programmation avancée de Steven dans l’environnement Unix) permettant de transformer un processus en démon:

#include  #include  #include  int daemon_int(void) { pid_t pid; if ((pid = fork()) < 0) return (-1) ; else if (pid != 0) exit(0) ; /* The parent process exits */ setsid() ; /* become session leader */ chdir("/") ; /* change the working dir */ umask(0) ; /* clear out the file mode creation mask */ return(0) ; } 

Bien sûr, cela suppose un système d'exploitation comme Unix.

Votre programme inclut donc la fonction ci-dessus et l’appelle dès son exécution. Il est ensuite dissocié de son processus parent et continuera à fonctionner jusqu'à ce qu'il se termine ou qu'il soit tué.

waitpid(-1, &status, WNOHANG) peut faire ce dont vous avez besoin: il devrait être renvoyé immédiatement si aucun processus enfant ne s’est terminé. Alternativement, vous pouvez écouter le signal SIGCHLD.

Fork pour créer le thread d’arrière-plan, puis exec. Voir une question sur la dupe sur ce site: Pouvons-nous démarrer un processus en arrière-plan en utilisant exec () en donnant & comme argument?