Comment démarrer un processus fils d’un processus démon qui n’est pas un démon

J’ai trouvé un problème intéressant sur le net. Je vais le reproduire ici pour référence.

EXIT_SUCCESS un processus daemon pour exécuter des programmes, puis les redémarre s’ils sortent avec un statut autre que EXIT_SUCCESS ; mais ces programmes ne voudront probablement pas être eux-mêmes des processus démons. Si j’utilise fork() et appelle ensuite execv() , le nouveau processus enfant sera-t-il également un processus démon?

J’ai essayé de lancer Firefox et cela n’a pas fonctionné. Alors, comment puis-je démarrer les processus enfants en tant que processus normal?

Les solutions proposées sur ce site ne me convainquent pas. Des idées?

Si par processus démon vous voulez dire que les descripteurs de fichiers de stdin, stdout et stderr ne sont connectés à aucun tty ou pts, alors oui. Il suffit donc d’ouvrir quelque chose pour stdin, stdout et stderr.

Cependant, vous devriez l’avoir essayé vous-même en premier, firefox (ici) s’ouvre parfaitement avec stdin, stdout et stderr redirigés vers /dev/null . Je pense que l’essentiel est d’appeler execv() ou execve() et de garder la variable DISPLAY .

modifier
Si vous demandez comment vous reconnecter aux destinations de descripteurs d’origine, il n’y a pas de solution portable. Évidemment, vous ne pouvez pas vous reconnecter à un tuyau. Vous pouvez cependant vous reconnecter (sous Linux au moins) au tty / pts dont vous êtes originaire, ou même au fichier (en utilisant le système de fichiers /proc et readlink() ). Vous devrez cependant deviner “seek” (par exemple si la commande d’origine était foo 2>> bar ).