pub struct CloneArgs {
pub flags: CloneFlags,
pub exit_signal: Option<Signal>,
pub stack: Option<StackSpecification>,
pub child_tid: Option<TidReceiver>,
pub parent_tid: Option<TidReceiver>,
pub tls: Option<u64>,
}Expand description
Arguments pour clone3.
La spec couche 0 (docs/specs/layer-0/family-process.md) liste neuf
champs (flags, pidfd, child_tid, parent_tid, exit_signal, stack, tls,
set_tid, cgroup). Ce type en expose six : les trois du fork classique
(flags, exit_signal, stack) plus les trois requis par la
création de thread (child_tid, parent_tid, tls). Les restants
(pidfd en tant que récepteur typé, set_tid, cgroup) seront ajoutés au
fil des syscalls qui les exigent. L’évolution est strictement additive :
aucun champ existant n’est destiné à être renommé ou retiré.
Pour demander la création d’un pidfd sur l’enfant, positionner le bit
CloneFlags::PIDFD ; le PidFd résultant est retourné dans la
variante CloneResult::Parent.
Création de thread. Renseigner stack, child_tid/parent_tid (pour
le join via CLONE_CHILD_CLEARTID) et éventuellement tls, puis appeler
clone_thread (et non
clone3, qui reste dédié au fork).
Fields§
§flags: CloneFlagsDrapeaux de comportement (CLONE_*).
exit_signal: Option<Signal>Signal à délivrer au parent à la mort de l’enfant. Some(SIGCHLD)
est le choix standard pour clone3 style fork. Doit être None
pour un thread (CLONE_THREAD interdit tout signal de sortie).
stack: Option<StackSpecification>Pile pour CLONE_VM (création de thread). None pour le fork classique
(rejeté par clone3 si renseigné) ; Some(_) est requis par
clone_thread.
child_tid: Option<TidReceiver>Récepteur du TID enfant côté enfant (CLONE_CHILD_SETTID /
CLONE_CHILD_CLEARTID). Pour le join de thread, le pointer sur le
même mot que Self::parent_tid et positionner CLONE_CHILD_CLEARTID.
parent_tid: Option<TidReceiver>Récepteur du TID enfant côté parent (CLONE_PARENT_SETTID). Écrit
par le kernel avant le retour de clone3, sans course.
tls: Option<u64>Adresse du bloc TLS de l’enfant (CLONE_SETTLS). None = pas de TLS
dédié (l’enfant hérite alors du registre TLS du parent : n’utiliser
aucune variable thread_local côté enfant dans ce cas). La spec
couche 0 type ce champ en u64 (adresse brute) — voir
docs/specs/layer-0/family-process.md.