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
| Name | Type | Dir | Description |
|---|---|---|---|
| pid | pid_t | - | |
| path | const char | - | |
| adesc | const struct _posix_spawn_args_desc | - | |
| argv | char | - | |
| envp | char | - |
Historique des versions
| XNU tag | macOS | # |
|---|---|---|
| xnu-1456.1.26 | macOS 10.6 Snow Leopard | 244 |
| xnu-1486.2.11 | — | 244 |
| xnu-1504.15.3 | — | 244 |
| xnu-1504.3.12 | — | 244 |
| xnu-1504.7.4 | — | 244 |
| xnu-1504.9.17 | — | 244 |
| xnu-1504.9.26 | — | 244 |
| xnu-1504.9.37 | — | 244 |
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.