Skip to content
Syscall BSD#244

svc · unix #244

posix_spawn

Crée un nouveau processus exécutant un programme donné en un seul appel système atomique.

Prototype

int posix_spawn(pid_t *pid, const char *path, const struct _posix_spawn_args_desc *adesc, char **argv, char **envp);

Retour: int

Arguments

NameTypeDirDescription
pidpid_t-
pathconst char-
adescconst struct _posix_spawn_args_desc-
argvchar-
envpchar-

Historique des versions

XNU tagmacOS#
xnu-1456.1.26macOS 10.6 Snow Leopard244
xnu-1486.2.11244
xnu-1504.15.3244
xnu-1504.3.12244
xnu-1504.7.4244
xnu-1504.9.17244
xnu-1504.9.26244
xnu-1504.9.37244

Exemples

Spawn with CLOEXEC default

posix_spawnattr_t attr;
posix_spawnattr_init(&attr);
posix_spawnattr_setflags(&attr, POSIX_SPAWN_CLOEXEC_DEFAULT);
pid_t pid;
char *argv[] = {"/bin/echo", "hi", NULL};
posix_spawn(&pid, argv[0], NULL, &attr, argv, environ);
posix_spawnattr_destroy(&attr);

Notes

Primitive de création de processus privilégiée par Apple. En interne elle contourne fork() en construisant directement la task et l'image enfant via un chemin noyau dédié, ce qui la rend sûre dans les apps liées à Cocoa. Les file actions et l'objet attributs permettent dup/close de fd, masques de signaux et extensions macOS (POSIX_SPAWN_CLOEXEC_DEFAULT, POSIX_SPAWN_START_SUSPENDED, personas). libdispatch, launchd et NSTask reposent dessus.

Détection

Endpoint Security lève ES_EVENT_TYPE_NOTIFY_EXEC pour les processus issus de spawn comme pour execve. La probe DTrace syscall::posix_spawn:entry expose le chemin et le pointeur d'attributs.

API associées

forkvforkexecvewait4waitidexit