Existe-t-il une méthode ou une API dans Linux/POSIX pour déterminer si le processus en cours est un fork? C'est à dire. si elle a été créée en appelant fork()
sans appel ultérieur à la famille execve()
?Comment tester si le processus d'appel est une branche
Je ne contrôle pas le code précédant ce point (il s'exécute dans une liaison de langage de haut niveau). J'ai juste besoin de savoir si le processus actuel exécute le programme de niveau supérieur, ou dans une fourchette de celui-ci.
Le meilleur que je suis venu avec teste si le processus a le même GID que son parent:
int is_fork = getpgid(0) == getpgid(getppid());
Cependant, cela ne fonctionne que si le parent a appelé setpgid()
qui apparemment execve()
ne le fait pas par défaut. Cela entraîne donc beaucoup de faux positifs.
Contrôlez-vous le programme? Si oui, la seule façon de savoir quelque chose comme cela, je peux penser serait d'avoir une variable d'état défini dans le processus de l'enfant après 'fourchue fork()'. – cfromme
Votre formulation est un peu étrange. ** Chaque processus ** (sauf init) est créé par 'fork()' Votre question devrait donc être: mon processus est-il un chef de groupe de processus? – wildplasser
@wildplasser Je ne connais pas vraiment la terminologie. Mais je pense que le chef de groupe de processus est le proc ancêtre qui a appelé 'setpgid()', pas celui qui appelle 'exec()'? – Jeroen