Man page - posix_spawn(3)

Packages contains this manual

Available languages:

en fr

Manual

posix_spawn

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
L’étape fork()
L’étape prĂ©-exec() : nettoyage
L’étape exec()
VALEUR RENVOYÉE
ERREURS
STANDARDS
HISTORIQUE
NOTES
BOGUES
EXEMPLES
Source du programme
VOIR AUSSI
TRADUCTION

NOM

posix_spawn, posix_spawnp — Engendrer un processus

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS

#include <spawn.h>

int posix_spawn(pid_t *restrict pid , const char *restrict path ,
const posix_spawn_file_actions_t *restrict
file_actions ,
const posix_spawnattr_t *restrict
attrp ,
char *const
argv [restrict],
char *const
envp [restrict]);
int posix_spawnp(pid_t *restrict
pid , const char *restrict file ,
const posix_spawn_file_actions_t *restrict
file_actions ,
const posix_spawnattr_t *restrict
attrp ,
char *const
argv [restrict],
char *const
envp [restrict]);

DESCRIPTION

Les fonctions posix_spawn () et posix_spawnp () sont utilisĂ©es pour crĂ©er un processus enfant qui exĂ©cute le fichier indiquĂ©. Ces fonctions sont spĂ©cifiĂ©es par POSIX pour fournir une mĂ©thode standard de crĂ©ation de nouveaux processus sur les machines n’ayant pas la capacitĂ© de prendre l’appel systĂšme fork (2) en charge. Ces machines sont en gĂ©nĂ©ral de petits systĂšmes embarquĂ©s sans MMU.

Les fonctions posix_spawn () et posix_spawnp () fournissent les fonctionnalitĂ©s de fork (2) et exec (3) combinĂ©es, complĂ©tĂ©es par des Ă©tapes facultatives de nettoyage dans l’enfant avant l’appel Ă  exec (3). Ces fonctions n’ont pas vocation Ă  remplacer les appels systĂšmes fork (2) et execve (2). En fait, elles ne fournissent qu’un sous-ensemble des fonctionnalitĂ©s qui peuvent ĂȘtre rĂ©alisĂ©es par ces appels systĂšmes.

La seule diffĂ©rence entre posix_spawn () et posix_spawnp () est la maniĂšre avec laquelle elles spĂ©cifient le fichier devant ĂȘtre exĂ©cutĂ© par le processus enfant. Avec posix_spawn (), le fichier exĂ©cutable est indiquĂ© par un chemin (absolu ou relatif). Avec posix_spawnp (), le fichier exĂ©cutable n’est indiquĂ© que par un nom de fichier et le systĂšme le cherche dans la liste des rĂ©pertoires indiquĂ©s dans PATH (de la mĂȘme façon que execvp (3)). Le reste de cette page est Ă©crit du point de vue de posix_spawn () et il est Ă  garder en mĂ©moire que posix_spawnp () ne diffĂšre que par le point qui vient d’ĂȘtre dĂ©crit.

Les arguments restants de ces fonctions sont comme suit :

pid

pointe vers un tampon utilisĂ© pour retourner l’identifiant du nouveau processus enfant.

file_actions

pointe vers un objet d’actions sur fichier qui indique les actions en lien avec des fichiers devant ĂȘtre effectuĂ©es par l’enfant entre les Ă©tapes fork (2) et exec (3). Cet objet est initialisĂ© et rempli avant l’appel Ă  posix_spawn () par un appel aux fonctions posix_spawn_file_actions_init (3) et posix_spawn_file_actions_* ().

attrp

pointe vers un objet d’attributs qui spĂ©cifie divers attributs du processus enfant créé. Cet objet est initialisĂ© et rempli avant l’appel Ă  posix_spawn () par un appel aux fonctions posix_spawnattr_init (3) et posix_spawnattr_* ().

argv

envp

indiquent la liste des arguments ainsi que l’environnement du programme qui doit ĂȘtre exĂ©cutĂ© dans le processus enfant, de la mĂȘme façon que execve (2).

Ci-dessous, les fonctions sont dĂ©crites selon une mĂ©thode en trois Ă©tapes : fork (), prĂ©- exec () (exĂ©cutĂ© dans l’enfant) et exec () (exĂ©cutĂ© dans l’enfant).

L’étape fork()

Depuis la glibc 2.24, la fonction posix_spawn () commence par appeler clone (2) avec les drapeaux CLONE_VM et CLONE_VFORK . Les implĂ©mentations plus anciennes utilisent fork (2) ou mĂȘme vfork (2) (voir ci-dessous).

L’identifiant du nouveau processus enfant est placĂ© dans *pid . La fonction posix_spawn () rend alors la main au processus appelant.

Ensuite, le parent peut utiliser l’un des appels systĂšme dĂ©crits dans wait (2) pour vĂ©rifier l’état du processus enfant. Si l’enfant Ă©choue dans n’importe laquelle des Ă©tapes de nettoyage dĂ©crites ci-dessous ou n’arrive pas Ă  exĂ©cuter le fichier indiquĂ©, il retourne avec un Ă©tat 127.

Avant la glibc 2.24, le processus enfant est créé avec vfork (2) au lieu de fork (2) lorsqu’une des conditions suivantes est remplie :

-

l’élĂ©ment spawn-flags de l’objet d’attributs sur lequel attrp pointe contient le drapeau POSIX_SPAWN_USEVFORK spĂ©cifique Ă  GNU ; ou

-

file_actions est NULL et l’élĂ©ment spawn-flags de l’objet d’attributs sur lequel pointe attrp ne contient pas POSIX_SPAWN_SETSIGMASK , POSIX_SPAWN_SETSIGDEF , POSIX_SPAWN_SETSCHEDPARAM , POSIX_SPAWN_SETSCHEDULER , POSIX_SPAWN_SETPGROUP ou POSIX_SPAWN_RESETIDS .

En d’autres termes, vfork (2) est utilisĂ©e si l’appelant le demande ou si aucun nettoyage n’est attendu dans l’enfant avant qu’il n’ exec (3)ute le fichier demandĂ©.

L’étape prĂ©-exec() : nettoyage

Entre les Ă©tapes fork () et exec (), un processus enfant peut avoir Ă  effectuer un ensemble d’actions de nettoyage. Les fonctions posix_spawn () et posix_spawnp () prennent en charge un ensemble, petit et bien dĂ©terminĂ©, de tĂąches systĂšme que l’enfant peut accomplir avant d’exĂ©cuter le fichier exĂ©cutable. Ces opĂ©rations sont contrĂŽlĂ©es par l’objet d’attributs sur lequel attrp pointe et l’objet d’actions sur fichier sur lequel file_actions pointe. Dans l’enfant, le traitement est fait dans l’ordre suivant :

(1)

Actions d’attributs de processus : masque de signaux, gestionnaires de signaux par dĂ©faut, algorithme d’ordonnancement et paramĂštres, groupe du processus, et les identifiants d’utilisateur et de groupe effectifs sont changĂ©s comme indiquĂ© dans l’objet d’attributs vers lequel attrp pointe.

(2)

Les actions sur fichier, telles qu’indiquĂ©es dans l’argument file_action , sont effectuĂ©es dans l’ordre dans lequel elles ont Ă©tĂ© spĂ©cifiĂ©es par les appels aux fonctions posix_spawn_file_actions_add* ().

(3)

Les descripteurs de fichiers avec le drapeau FD_CLOEXEC sont fermés.

Tous les attributs de processus de l’enfant, autres que ceux affectĂ©s par les attributs indiquĂ©s dans l’objet vers lequel attrp pointe et par les actions sur fichier indiquĂ©es dans l’objet vers lequel file_actions pointe, seront affectĂ©s comme si l’enfant avait Ă©tĂ© créé par fork (2) et que le programme avait Ă©tĂ© exĂ©cutĂ© par execve (2).

Les actions d’attributs de processus sont dĂ©finies par l’objet d’attributs vers lequel attrp pointe. L’attribut spawn-flags (indiquĂ© par un appel Ă  posix_spawnattr_setflags (3)) contrĂŽle les actions globales effectuĂ©es, et les autres attributs de l’objet dĂ©terminent les valeurs utilisĂ©es durant ces actions.

Les effets des drapeaux qui peuvent ĂȘtre indiquĂ©s dans spawn-flags sont les suivants :
POSIX_SPAWN_SETSIGMASK

Fixe le masque de signaux Ă  l’ensemble donnĂ© dans l’attribut spawn-sigmask de l’objet vers lequel attrp pointe. Si le drapeau POSIX_SPAWN_SETSIGMASK n’est pas levĂ©, alors l’enfant hĂ©rite du masque de signaux de son parent.

POSIX_SPAWN_SETSIGDEF

Réétablit la disposition de tous les signaux indiquĂ©s dans l’attribut spawn-sigdefault de l’objet vers lequel attrp pointe Ă  la valeur par dĂ©faut. Pour le traitement des dispositions de signaux non spĂ©cifiĂ©es dans l’attribut spawn-sigdefault ou le traitement lorsque POSIX_SPAWN_SETSIGDEF n’est pas spĂ©cifiĂ©, consultez execve (2).

POSIX_SPAWN_SETSCHEDPARAM

Si ce drapeau est levĂ© et que le drapeau POSIX_SPAWN_SETSCHEDULER n’est pas levĂ©, fixer alors les paramĂštres de l’ordonnanceur aux paramĂštres dĂ©finis dans l’attribut spawn-schedparam de l’objet sur lequel attrp pointe.

POSIX_SPAWN_SETSCHEDULER

Fixe l’algorithme de stratĂ©gie d’ordonnancement et les paramĂštres de l’enfant comme suit :

-

La stratĂ©gie d’ordonnancement est rĂ©glĂ©e Ă  la valeur indiquĂ©e dans l’attribut spawn-schedpolicy de l’objet sur lequel attrp pointe.

-

Les paramĂštres de l’ordonnanceur sont fixĂ©s Ă  la valeur indiquĂ©e dans l’attribut spawn-schedparam de l’objet sur lequel attrp pointe (mais voir la section BOGUES).

Si les drapeaux POSIX_SPAWN_SETSCHEDPARAM et POSIX_SPAWN_SETSCHEDPOLICY ne sont pas spĂ©cifiĂ©s, l’enfant hĂ©rite du parent les attributs correspondants de l’ordonnanceur.

POSIX_SPAWN_RESETIDS

Si le drapeau est levĂ©, rĂ©initialiser les UID et GID effectifs aux UID et GID rĂ©els du processus parent. Si ce drapeau n’est pas indiquĂ©, alors l’enfant conserve les UID et GID effectifs du processus parent. Dans les deux cas, si les bits de permission set-user-ID et set-group-ID sont activĂ©s sur le fichier exĂ©cutable, leur effet surcharge la valeur des UID et GID effectifs (voir execve (2)).

POSIX_SPAWN_SETPGROUP

Fixer le groupe du processus Ă  la valeur indiquĂ©e dans l’attribut spawn-pgroup de l’objet sur lequel attrp pointe. Si l’attribut spawn-pgroup Ă  une valeur de 0, l’identifiant de groupe du processus enfant est rendu identique Ă  l’identifiant de processus. Si le drapeau POSIX_SPAWN_SETPGROUP n’est pas levĂ©, l’enfant hĂ©rite de l’identifiant de groupe du processus parent.

POSIX_SPAWN_USEVFORK

Depuis la version 2.24 de la glibc, ce drapeau n’a aucun effet. Sur des implĂ©mentations plus anciennes, lever ce drapeau force l’étape fork() Ă  utiliser vfork (2) Ă  la place de fork (2). La macro de test de fonctionnalitĂ©s _GNU_SOURCE doit ĂȘtre dĂ©finie pour obtenir une dĂ©finition de cette constante.

POSIX_SPAWN_SETSID (depuis la glibc 2.26)

Si ce drapeau est levĂ©, le processus enfant doit crĂ©er une nouvelle session et devenir le responsable de cette session. Le processus enfant doit aussi devenir le responsable du nouveau groupe du processus de la session (voir setid (2)). La macro de test de fonctionnalitĂ©s _GNU_SOURCE doit ĂȘtre dĂ©finie pour obtenir la dĂ©finition de cette constante.

Si attrp est NULL, alors les comportements par dĂ©faut dĂ©crits plus haut pour chaque drapeau s’appliquent.

L’argument file_actions indique une sĂ©quence d’opĂ©rations sur fichier effectuĂ©es dans le processus enfant aprĂšs le traitement gĂ©nĂ©ral dĂ©crit plus haut et avant de faire l’étape exec (). Si file_actions est NULL, aucune action spĂ©cifique n’est effectuĂ©e et la sĂ©mantique standard de exec (3) s’applique : les descripteurs de fichier ouverts avant exec () restent ouverts dans le nouveau processus Ă  l’exception de ceux pour lesquels le drapeau FD_CLOEXEC a Ă©tĂ© levĂ©. Les verrous de fichier restent en place.

Si file_actions n’est pas NULL, il contient un ensemble ordonnĂ© de demandes pour exĂ©cuter open (2), close (2) et dup2 () sur des fichiers . Ces requĂȘtes sont ajoutĂ©es Ă  file_actions par posix_spawn_file_actions_addopen (3), posix_spawn_file_actions_addclose (3) et posix_spawn_file_actions_adddup2 (3). Les opĂ©rations demandĂ©es sont effectuĂ©es dans l’ordre dans lequel elles ont Ă©tĂ© ajoutĂ©es Ă  file_actions .

Si une des actions de nettoyage Ă©choue (Ă  cause de mauvaises valeurs ou pour toute autre raison pour laquelle la gestion de signaux, l’ordonnancement de processus, les fonctions d’identifiant de groupe de processus ou d’opĂ©rations de descripteur de fichier peuvent Ă©chouer), le processus enfant termine avec un code de retour de 127.

L’étape exec()

Une fois que l’enfant s’est dĂ©doublĂ© sans erreur et a exĂ©cutĂ© toutes les Ă©tapes prĂ©-exec (), l’enfant lance l’exĂ©cutable souhaitĂ©.

Le processus enfant rĂ©cupĂšre son environnement depuis l’argument envp , analysĂ© comme si execve (2) avait Ă©tĂ© appelĂ© avec. Les arguments du processus créé viennent de l’argument argv , analysĂ© comme pour execve (2).

VALEUR RENVOYÉE

En cas de succĂšs, posix_spawn () et posix_spawnp () placent l’identifiant du processus enfant dans pid et renvoient 0 . En cas d’erreur lors de l’étape fork() , aucun enfant n’est créé, le contenu de *pid n’est pas dĂ©fini et ces fonctions renvoient un code d’erreur comme dĂ©crit plus bas.

MĂȘme lorsque ces fonctions renvoient un Ă©tat de rĂ©ussite, le processus enfant peut encore Ă©chouer pour une plĂ©thore de raisons liĂ©es au prĂ©-exec (). De plus, exec (3) peut Ă©chouer. Dans tous ces cas, le processus enfant termine avec 127 comme code de retour.

ERREURS

Les fonctions posix_spawn () et posix_spawnp () n’échouent que dans le cas oĂč l’appel sous-jacent Ă  fork (2), vfork (2) ou clone (2) Ă©choue. Dans ces cas, ces fonctions renvoient un code d’erreur correspondant aux erreurs dĂ©crites pour fork (2), vfork (2) ou clone (2).

De plus, ces fonction échouent si :

ENOSYS

Fonction non prise en charge sur ce systĂšme.

STANDARDS

POSIX.1-2008.

HISTORIQUE

glibc 2.2. POSIX.1-2001.

NOTES

Les activitĂ©s de nettoyage dans l’enfant sont contrĂŽlĂ©es par les objets sur lesquels attrp pointe (pour les actions n’agissant pas sur des fichiers) et file_actions . Dans le jargon POSIX, les types de donnĂ©es posix_spawnattr_t et posix_spawn_file_actions_t sont Ă©voquĂ©s comme des objets et leurs Ă©lĂ©ments ne sont pas spĂ©cifiĂ©s par des noms. Les programmes portables doivent initialiser ces objets par l’appel aux fonctions spĂ©cifiĂ©es par POSIX uniquement. En d’autres termes, bien que ces objets puissent ĂȘtre implĂ©mentĂ©s avec des structures contenant des champs, les programmes portables doivent Ă©viter toute dĂ©pendance Ă  de tels dĂ©tails d’implĂ©mentation.

Selon POSIX, il n’est pas dĂ©terminĂ© si les gestionnaires de dĂ©doublement Ă©tablis avec pthread_atfork (3) sont appelĂ©s lorsque posix_spawn () est appelĂ©e. Depuis la version 2.24 de la glibc, les gestionnaires de dĂ©doublement ne sont jamais exĂ©cutĂ©s. Sur des implĂ©mentations plus anciennes, les gestionnaires de dĂ©doublement ne sont appelĂ©s que si l’enfant est créé avec fork (2).

Il n’existe pas de fonction « posix_fspawn » (c’est-Ă -dire une fonction qui serait Ă  posix_spawn () ce que fexecve (3) est Ă  execve (2)). Cependant, cette fonctionnalitĂ© peut ĂȘtre obtenue en spĂ©cifiant l’argument path comme l’un des fichiers dans le rĂ©pertoire /proc/self/fd de l’appelant.

BOGUES

POSIX.1 spĂ©cifie que lorsque POSIX_SPAWN_SETSCHEDULER est indiquĂ© dans spawn-flags , alors POSIX_SPAWN_SETSCHEDPARAM est ignorĂ© s’il est prĂ©sent. Cependant, avant la version 2.14 de la glibc, les appels Ă  posix_spawn () Ă©chouent avec une erreur si POSIX_SPAWN_SETSCHEDULER est indiquĂ© sans que POSIX_SPAWN_SETSCHEDPARAM ne le soit Ă©galement.

EXEMPLES

Le programme suivant illustre l’utilisation de plusieurs fonctions de l’API spawn de POSIX. Le programme accepte des attributs en ligne de commande qui peuvent ĂȘtre utilisĂ©s pour crĂ©er des objets d’actions sur fichier ou d’attributs. Les arguments de la ligne de commande restants sont utilisĂ©s comme nom de l’exĂ©cutable et comme arguments de ligne de commande du programme exĂ©cutĂ© dans l’enfant.

Dans la premiĂšre invocation, la commande date (1) est exĂ©cutĂ©e dans l’enfant et l’appel Ă  posix_spawn () n’utilise pas d’objets d’actions sur fichier ou d’attributs.

$ ./a.out date
PID de l’enfant : 7634
Tue Feb 1 19:47:50 CEST 2011
État de l’enfant : terminĂ©, statut=0

Dans la deuxiĂšme invocation, l’option en ligne de commande -c est utilisĂ©e pour crĂ©er un objet d’actions sur fichier qui ferme la sortie standard dans l’enfant. Par la suite, date (1) Ă©choue lors d’une tentative d’écriture et termine avec un Ă©tat 1 .

$ ./a.out -c date
PID de l’enfant : 7636
date : erreur d’écriture : Mauvais descripteur de fichier
État de l’enfant : terminĂ©, Ă©tat=1

Dans l’invocation suivante, l’option en ligne de commande -s est utilisĂ©e pour crĂ©er un objet d’attributs qui indique que tous les signaux (blocables) doivent ĂȘtre bloquĂ©s dans l’enfant. Par la suite, une tentative de tuer l’enfant par le signal par dĂ©faut envoyĂ© par kill (1) (c’est-Ă -dire SIGTERM ) Ă©choue car ce signal est bloquĂ©. Par consĂ©quent, il est nĂ©cessaire d’utiliser SIGKILL pour tuer l’enfant (car SIGKILL ne peut ĂȘtre bloquĂ©).

$ ./a.out -s sleep 60 &
[1] 7637
$ PID de l’enfant : 7638

$ kill 7638
$ kill -KILL 7638
$ État de l’enfant : tuĂ© par le signal 9
[1]+ Fait ./a.out -s sleep 60

Lorsque l’enfant tente d’exĂ©cuter une commande qui n’existe pas, l’appel Ă  exec (3) Ă©choue et l’enfant termine avec un Ă©tat 127.

$ ./a.out xxxxx PID de l’enfant : 10190 Statut de l’enfant : terminĂ©, Ă©tat=127

Source du programme

#include <errno.h>
#include <spawn.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <wait.h>
#define errExit(msg) do { perror(msg); \
exit(EXIT_FAILURE); } while (0)
#define errExitEN(en, msg) \
do { errno = en; perror(msg); \
exit(EXIT_FAILURE); } while (0)
char **environ;
int
main(int argc, char *argv[])
{
pid_t child_pid;
int s, opt, status;
sigset_t mask;
posix_spawnattr_t attr;
posix_spawnattr_t *attrp;
posix_spawn_file_actions_t file_actions;
posix_spawn_file_actions_t *file_actionsp;
/* Lire les options de la ligne de commande pouvant ĂȘtre utilisĂ©es
pour indiquer un objet d’attributs et un objet d’actions sur fichier
fichier pour l’enfant. */
attrp = NULL;
file_actionsp = NULL;
while ((opt = getopt(argc, argv, "sc")) != -1) {
switch (opt) {
case 'c': /* -c: fermer la sortie standard dans
l’enfant */
/* CrĂ©er un objet d’actions de fichier et lui ajouter
une action "fermer". */
s = posix_spawn_file_actions_init(&file_actions);
if (s != 0)
errExitEN(s, "posix_spawn_file_actions_init");
s = posix_spawn_file_actions_addclose(&file_actions,
STDOUT_FILENO);
if (s != 0)
errExitEN(s, "posix_spawn_file_actions_addclose");
file_actionsp = &file_actions;
break;
case 's': /* -s: bloquer tous les signaux dans
l’enfant */
/* CrĂ©er un objet d’attributs et lui ajouter
une action "établir un masque de signaux". */
s = posix_spawnattr_init(&attr);
if (s != 0)
errExitEN(s, "posix_spawnattr_init");
s = posix_spawnattr_setflags(&attr, POSIX_SPAWN_SETSIGMASK);
if (s != 0)
errExitEN(s, "posix_spawnattr_setflags");
sigfillset(&mask);
s = posix_spawnattr_setsigmask(&attr, &mask);
if (s != 0)
errExitEN(s, "posix_spawnattr_setsigmask");
attrp = &attr;
break;
}
}
/* CrĂ©er l’enfant. Le nom du programme Ă  exĂ©cuter et les arguments de
la ligne de commande sont récupérés dans les arguments de la ligne
de commande de ce programme. L’environnement du programme exĂ©cutĂ©
dans l’enfant est identique à l’environnement du parent. */
s = posix_spawnp(&child_pid, argv[optind], file_actionsp, attrp,
&argv[optind], environ);
if (s != 0)
errExitEN(s, "posix_spawn");
/* Détruire tout objet créé précédemment. */
if (attrp != NULL) {
s = posix_spawnattr_destroy(attrp);
if (s != 0)
errExitEN(s, "posix_spawnattr_destroy");
}
if (file_actionsp != NULL) {
s = posix_spawn_file_actions_destroy(file_actionsp);
if (s != 0)
errExitEN(s, "posix_spawn_file_actions_destroy");
}
printf("PID de l’enfant : %jd\n", (intmax_t) child_pid);
/* Observer l’état de l’enfant jusqu’à son arrĂȘt. */
do {
s = waitpid(child_pid, &status, WUNTRACED | WCONTINUED);
if (s == -1)
errExit("waitpid");
printf("Child status: ");
if (WIFEXITED(status)) {
printf("terminé, état=%d\n", WEXITSTATUS(status));
} else if (WIFSIGNALED(status)) {
printf("tué par le signal %d\n", WTERMSIG(status));
} else if (WIFSTOPPED(status)) {
printf("arrĂȘtĂ© par le signal %d\n", WSTOPSIG(status));
} else if (WIFCONTINUED(status)) {
printf("reprise\n");
}
} while (!WIFEXITED(status) && !WIFSIGNALED(status));
exit(EXIT_SUCCESS);
}

VOIR AUSSI

close (2), dup2 (2), execl (2), execlp (2), fork (2), open (2), sched_setparam (2), sched_setscheduler (2), setpgid (2), setuid (2), sigaction (2), sigprocmask (2), posix_spawn_file_actions_addclose (3), posix_spawn_file_actions_adddup2 (3), posix_spawn_file_actions_addopen (3), posix_spawn_file_actions_destroy (3), posix_spawn_file_actions_init (3), posix_spawnattr_destroy (3), posix_spawnattr_getflags (3), posix_spawnattr_getpgroup (3), posix_spawnattr_getschedparam (3), posix_spawnattr_getschedpolicy (3), posix_spawnattr_getsigdefault (3), posix_spawnattr_getsigmask (3), posix_spawnattr_init (3), posix_spawnattr_setflags (3), posix_spawnattr_setpgroup (3), posix_spawnattr_setschedparam (3), posix_spawnattr_setschedpolicy (3), posix_spawnattr_setsigdefault (3), posix_spawnattr_setsigmask (3), pthread_atfork (3), <spawn.h> , Base Definitions volume of POSIX.1-2001, http://www.opengroup.org/unix/online.html

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Grégoire Scano <gregoire.scano@malloc.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .