Skip to main content

unshare_thread_group

Function unshare_thread_group 

Source
pub fn unshare_thread_group() -> Result<(), Errno>
Expand description

Demande au noyau si le processus appelant est seul dans son groupe de fils : unshare(CLONE_THREAD) (ADR-186 D1).

Quand l’appelant est seul, il n’y a rien à défaire : l’appel réussit et ne change rien. Quand le groupe compte une autre tâche, le noyau refuse avec EINVAL (unshare(2), « CLONE_THREAD … was specified in flags, and the caller is multithreaded »). C’est le noyau qui compte, sans lire aucun chemin : ni /proc, ni Landlock n’interviennent.

Ce que le noyau compte comme « une autre tâche » — mesuré le 2026-09-26 (ADR-186 §1.3) :

  • tout fil ordinaire vivant ;
  • un fil de travail d’io_uring (iou-wrk-…), qui ne disparaît plus une fois créé, même anneau fermé — alors qu’il n’exécute jamais de code utilisateur ;
  • un fil qui vient de se terminer, un court instant après son join.

La réponse ne se trompe donc que dans un sens : elle peut dire « plusieurs » quand aucun fil utilisateur ne vit, jamais « seul » quand il y en a un.

§Errors

  • Errno::EINVAL : le groupe de fils compte au moins une autre tâche (voir ci-dessus). C’est la réponse « non », pas une panne.
  • Toute autre erreur est celle du noyau ou d’un filtre seccomp (par exemple un filtre qui rend EPERM) : elle ne dit rien du nombre de fils.