Un procés fill en informàtica és un procés creat per un altre procés (el procés pare). Aquesta tècnica pertany als sistemes operatius multitasca, i de vegades s'anomena subprocés o tradicionalment subtasca.
Hi ha dos procediments principals per crear un procés fill: la trucada al sistema fork (preferit en sistemes semblants a Unix i l'estàndard POSIX) i el spawn (preferit en el nucli modern (NT) de Microsoft Windows, així com en alguns sistemes operatius històrics). sistemes).[1]
Els processos secundaris daten de finals dels anys 60, amb una forma primerenca en revisions posteriors de la forma Multiprogramació amb un nombre fix de tasques versió II (MFT-II) del sistema operatiu IBM OS/360, que va introduir subtasques (vegeu tasca). La forma actual d'Unix es basa en Multics (1969), mentre que la forma de Windows NT es basa en OpenVMS (1978), de RSX-11 (1972).[2]
Un procés fill hereta la majoria dels seus atributs, com ara descriptors de fitxers, del seu pare. A Unix, un procés fill normalment es crea com una còpia del pare, utilitzant la trucada del sistema fork. El procés fill es pot superposar amb un programa diferent (utilitzant exec) segons sigui necessari.Cada procés pot crear molts processos fills però tindrà com a màxim un procés pare; si un procés no té un pare, això normalment indica que ha estat creat directament pel nucli. En alguns sistemes, inclosos els sistemes basats en Linux, el primer procés (anomenat init) l'inicia el nucli en el moment de l'arrencada i no acaba mai (vegeu el procés d'inici de Linux); es poden llançar altres processos sense pares per dur a terme diverses tasques de dimoni a l'espai d'usuari. Una altra manera que un procés acabi sense un pare és si el pare mor, deixant un procés orfe; però en aquest cas serà adoptat en breu per init. El senyal SIGCHLD s'envia al pare d'un procés fill quan surt, s'interromp o es reprèn després de ser interromput. Per defecte, el senyal simplement s'ignora.[3]
Quan finalitza un procés fill, es retorna part de la informació al procés principal.Quan un procés fill finalitza abans que el pare hagi cridat wait, el nucli reté informació sobre el procés, com ara el seu estat de sortida, per permetre que el seu pare cridi a wait més tard. Com que el nen encara consumeix recursos del sistema, però no els executa, es coneix com un procés zombi. La trucada del sistema d'espera s'invoca habitualment al controlador SIGCHLD.
POSIX.1-2001 permet que un procés pare opti perquè el nucli reculli automàticament els processos fills que finalitzin establint explícitament la disposició de SIGCHLD a SIG_IGN (tot i que ignorar és el valor predeterminat, la recol·lecció automàtica només es produeix si la disposició està configurada per ignorar explícitament [4]), o establint el senyalador SA_NOCLDWAIT per al senyal SIGCHLD. Els nuclis Linux 2.6 s'adhereixen a aquest comportament i FreeBSD admet aquests dos mètodes des de la versió 5.0. Tanmateix, a causa de les diferències històriques entre els comportaments de System V i BSD pel que fa a ignorar SIGCHLD, cridar a wait segueix sent el paradigma més portàtil per netejar després dels processos secundaris bifurcats.