spawn.h(7POSIX)

πŸ’– spawn.h β€” the header that literally spawns whole new processes, bestie πŸ’–

okay so before we even get into it β€” hi, this is the POSIX Programmer's Manual page for spawn.h, and I need you to know that the Linux implementation of this interface may differ from what's written here (so like, go check the corresponding Linux manual page for the deets on Linux behavior), or honestly the interface might just not be implemented on Linux at all. πŸ™ˆ vibe check accordingly.


✨ NAME ✨

spawn.h β€” spawn (ADVANCED REALTIME) πŸ¦‹


🌸 SYNOPSIS 🌸

#include <spawn.h>

πŸ’… DESCRIPTION πŸ’…

So the <spawn.h> header is gonna define the posix_spawnattr_t and posix_spawn_file_actions_t types β€” those are the ones you use when you're doing spawn operations. iconic behavior fr.

It shall also define the mode_t and pid_t types, exactly as described over in <sys/types.h>. πŸŽ€

And it defines the sigset_t type as described in <signal.h>. 🌈

The tag sched_param shall be declared as naming an incomplete structure type β€” like, a mystery box β€” and the contents of that structure are described in the <sched.h> header. not me leaving it undefined on purpose πŸ’€

Then the header defines these symbolic constants for you to use as flags that may be set in a posix_spawnattr_t object using the posix_spawnattr_setflags() function:

  • POSIX_SPAWN_RESETIDS
  • POSIX_SPAWN_SETPGROUP
  • POSIX_SPAWN_SETSCHEDPARAM
  • POSIX_SPAWN_SETSCHEDULER
  • POSIX_SPAWN_SETSIGDEF
  • POSIX_SPAWN_SETSIGMASK

And the following shall be declared as functions, and may also be defined as macros (yes, both, it's giving flexible). Function prototypes shall be provided, and here they are, verbatim, no notes:

int   posix_spawn(pid_t *restrict, const char *restrict,
          const posix_spawn_file_actions_t *,
          const posix_spawnattr_t *restrict, char *const [restrict],
          char *const [restrict]);
int   posix_spawn_file_actions_addclose(posix_spawn_file_actions_t *,
          int);
int   posix_spawn_file_actions_adddup2(posix_spawn_file_actions_t *,
          int, int);
int   posix_spawn_file_actions_addopen(posix_spawn_file_actions_t *restrict,
          int, const char *restrict, int, mode_t);
int   posix_spawn_file_actions_destroy(posix_spawn_file_actions_t *);
int   posix_spawn_file_actions_init(posix_spawn_file_actions_t *);
int   posix_spawnattr_destroy(posix_spawnattr_t *);
int   posix_spawnattr_getflags(const posix_spawnattr_t *restrict,
          short *restrict);
int   posix_spawnattr_getpgroup(const posix_spawnattr_t *restrict,
          pid_t *restrict);
int   posix_spawnattr_getschedparam(const posix_spawnattr_t *restrict,
          struct sched_param *restrict);
int   posix_spawnattr_getschedpolicy(const posix_spawnattr_t *restrict,
          int *restrict);
int   posix_spawnattr_getsigdefault(const posix_spawnattr_t *restrict,
          sigset_t *restrict);
int   posix_spawnattr_getsigmask(const posix_spawnattr_t *restrict,
          sigset_t *restrict);
int   posix_spawnattr_init(posix_spawnattr_t *);
int   posix_spawnattr_setflags(posix_spawnattr_t *, short);
int   posix_spawnattr_setpgroup(posix_spawnattr_t *, pid_t);
int   posix_spawnattr_setschedparam(posix_spawnattr_t *restrict,
          const struct sched_param *restrict);
int   posix_spawnattr_setschedpolicy(posix_spawnattr_t *, int);
int   posix_spawnattr_setsigdefault(posix_spawnattr_t *restrict,
          const sigset_t *restrict);
int   posix_spawnattr_setsigmask(posix_spawnattr_t *restrict,
          const sigset_t *restrict);
int   posix_spawnp(pid_t *restrict, const char *restrict,
          const posix_spawn_file_actions_t *,
          const posix_spawnattr_t *restrict,
          char *const [restrict], char *const [restrict]);
heads up bestie πŸ‘‘ β€” including the <spawn.h> header may make visible symbols that are defined in the <sched.h> and <signal.h> headers. so like, surprise guests. 🫢

Oh and btw, the following sections are informative. not normative. just vibes.


πŸ“ APPLICATION USAGE πŸ“

None. literally nothing. the void. πŸ’€


🧚 RATIONALE 🧚

None. also nothing. we love a low-effort section, slay. ✨


πŸ”₯ FUTURE DIRECTIONS πŸ”₯

None. future? unknown. the future is a mystery and so is this section. 🌈


πŸŽ€ SEE ALSO πŸŽ€

  • <sched.h>
  • <semaphore.h>
  • <signal.h>
  • <sys_types.h>

And from the System Interfaces volume of POSIX.1‐2017, go read up on:

  • posix_spawn()
  • posix_spawn_file_actions_addclose()
  • posix_spawn_file_actions_adddup2()
  • posix_spawn_file_actions_destroy()
  • posix_spawnattr_destroy()
  • posix_spawnattr_getflags()
  • posix_spawnattr_getpgroup()
  • posix_spawnattr_getschedparam()
  • posix_spawnattr_getschedpolicy()
  • posix_spawnattr_getsigdefault()
  • posix_spawnattr_getsigmask()

okay legal moment, stay with me, this part matters and I'm not changing a single word of the meaning:

Portions of this text are reprinted and reproduced in electronic form from IEEE Std 1003.1-2017, Standard for Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 7, 2018 Edition, Copyright (C) 2018 by the Institute of Electrical and Electronics Engineers, Inc and The Open Group. In the event of any discrepancy between this version and the original IEEE and The Open Group Standard, the original IEEE and The Open Group Standard is the referee document. The original Standard can be obtained online at http://www.opengroup.org/unix/online.html .

Any typographical or formatting errors that appear in this page are most likely to have been introduced during the conversion of the source files to man page format. To report such errors, see https://www.kernel.org/doc/man-pages/reporting_bugs.html .


and that's the whole page, bestie πŸ’œ this lil masterpiece was brought to you by IEEE/The Open Group, 2017 β€” yes, the spawn.h(7POSIX) era, and honestly? iconic. periodt. πŸ’…βœ¨