glibc (2.38)

(root)/
include/
bits/
sched.h
       1  /* Definitions of constants and data structure for POSIX 1003.1b-1993
       2     scheduling interface.
       3     Copyright (C) 1996-2023 Free Software Foundation, Inc.
       4     This file is part of the GNU C Library.
       5  
       6     The GNU C Library is free software; you can redistribute it and/or
       7     modify it under the terms of the GNU Lesser General Public
       8     License as published by the Free Software Foundation; either
       9     version 2.1 of the License, or (at your option) any later version.
      10  
      11     The GNU C Library is distributed in the hope that it will be useful,
      12     but WITHOUT ANY WARRANTY; without even the implied warranty of
      13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      14     Lesser General Public License for more details.
      15  
      16     You should have received a copy of the GNU Lesser General Public
      17     License along with the GNU C Library; if not, see
      18     <https://www.gnu.org/licenses/>.  */
      19  
      20  #ifndef _BITS_SCHED_H
      21  #define _BITS_SCHED_H 1
      22  
      23  #ifndef _SCHED_H
      24  # error "Never include <bits/sched.h> directly; use <sched.h> instead."
      25  #endif
      26  
      27  /* Scheduling algorithms.  */
      28  #define SCHED_OTHER		0
      29  #define SCHED_FIFO		1
      30  #define SCHED_RR		2
      31  #ifdef __USE_GNU
      32  # define SCHED_BATCH		3
      33  # define SCHED_ISO		4
      34  # define SCHED_IDLE		5
      35  # define SCHED_DEADLINE		6
      36  
      37  # define SCHED_RESET_ON_FORK	0x40000000
      38  #endif
      39  
      40  #ifdef __USE_GNU
      41  /* Cloning flags.  */
      42  # define CSIGNAL       0x000000ff /* Signal mask to be sent at exit.  */
      43  # define CLONE_VM      0x00000100 /* Set if VM shared between processes.  */
      44  # define CLONE_FS      0x00000200 /* Set if fs info shared between processes.  */
      45  # define CLONE_FILES   0x00000400 /* Set if open files shared between processes.  */
      46  # define CLONE_SIGHAND 0x00000800 /* Set if signal handlers shared.  */
      47  # define CLONE_PIDFD   0x00001000 /* Set if a pidfd should be placed
      48  				     in parent.  */
      49  # define CLONE_PTRACE  0x00002000 /* Set if tracing continues on the child.  */
      50  # define CLONE_VFORK   0x00004000 /* Set if the parent wants the child to
      51  				     wake it up on mm_release.  */
      52  # define CLONE_PARENT  0x00008000 /* Set if we want to have the same
      53  				     parent as the cloner.  */
      54  # define CLONE_THREAD  0x00010000 /* Set to add to same thread group.  */
      55  # define CLONE_NEWNS   0x00020000 /* Set to create new namespace.  */
      56  # define CLONE_SYSVSEM 0x00040000 /* Set to shared SVID SEM_UNDO semantics.  */
      57  # define CLONE_SETTLS  0x00080000 /* Set TLS info.  */
      58  # define CLONE_PARENT_SETTID 0x00100000 /* Store TID in userlevel buffer
      59  					   before MM copy.  */
      60  # define CLONE_CHILD_CLEARTID 0x00200000 /* Register exit futex and memory
      61  					    location to clear.  */
      62  # define CLONE_DETACHED 0x00400000 /* Create clone detached.  */
      63  # define CLONE_UNTRACED 0x00800000 /* Set if the tracing process can't
      64  				      force CLONE_PTRACE on this clone.  */
      65  # define CLONE_CHILD_SETTID 0x01000000 /* Store TID in userlevel buffer in
      66  					  the child.  */
      67  # define CLONE_NEWCGROUP    0x02000000	/* New cgroup namespace.  */
      68  # define CLONE_NEWUTS	0x04000000	/* New utsname group.  */
      69  # define CLONE_NEWIPC	0x08000000	/* New ipcs.  */
      70  # define CLONE_NEWUSER	0x10000000	/* New user namespace.  */
      71  # define CLONE_NEWPID	0x20000000	/* New pid namespace.  */
      72  # define CLONE_NEWNET	0x40000000	/* New network namespace.  */
      73  # define CLONE_IO	0x80000000	/* Clone I/O context.  */
      74  
      75  /* cloning flags intersect with CSIGNAL so can be used only with unshare and
      76     clone3 syscalls.  */
      77  #define CLONE_NEWTIME	0x00000080      /* New time namespace */
      78  #endif
      79  
      80  #include <bits/types/struct_sched_param.h>
      81  
      82  __BEGIN_DECLS
      83  
      84  #ifdef __USE_GNU
      85  /* Clone current process.  */
      86  extern int clone (int (*__fn) (void *__arg), void *__child_stack,
      87  		  int __flags, void *__arg, ...) __THROW;
      88  
      89  /* Unshare the specified resources.  */
      90  extern int unshare (int __flags) __THROW;
      91  
      92  /* Get index of currently used CPU.  */
      93  extern int sched_getcpu (void) __THROW;
      94  
      95  /* Get currently used CPU and NUMA node.  */
      96  extern int getcpu (unsigned int *, unsigned int *) __THROW;
      97  
      98  /* Switch process to namespace of type NSTYPE indicated by FD.  */
      99  extern int setns (int __fd, int __nstype) __THROW;
     100  #endif
     101  
     102  __END_DECLS
     103  
     104  #endif /* bits/sched.h */