sched_setscheduler(2)                                    sched_setscheduler(2)


NAME
     sched_setscheduler - set the scheduling policy of a process

C SYNOPSIS
     #include <sched.h>
     int sched_setscheduler (pid_t pid, int policy,
     const struct sched_param *param);

DESCRIPTION
     The sched_setscheduler system call is used to set the scheduling policy
     and related parameters for the process specified by pid.  If pid is set
     to zero, then the scheduling policy and parameters of the calling process
     will be affected.

     The policy parameter is used to select one of the following scheduling
     policies:

     SCHED_FIFO
             The first-in-first-out policy schedules processes according to
             their assigned priority values. The highest priority process is
             guaranteed control of the processor until it willingly yields the
             processor or blocks on a contended resource. If there is more
             than one runnable highest priority process, the highest priority
             process waiting the longest is granted control of the processor.
             A running process is preempted when a higher priority process
             becomes runnable.

     SCHED_RR
             The round-robin scheduling policy schedules processes according
             to their assigned priority values. The highest priority process
             is guaranteed control of the processor until it: willingly yields
             the processor, blocks on a contended resource, or exceeds its
             time quantum. If there is more than one runnable highest priority
             process, the highest priority process waiting the longest is
             granted control of the processor. When a process exceeds its time
             quantum it yields the processor and awaits rescheduling.  A
             running process is preempted when a higher priority process
             becomes runnable.

     Note that SCHED_FIFO and SCHED_RR processes are of higher priority than
     all other processes in the system.  Because of this, such a process may
     deadlock the system if it enters an infinite loop.  Further note, that
     the scheduling policy and priority are inherited across a fork and that
     the scheduling policy is shared by all members of a share group (see
     sproc(2)).

     SCHED_TS
             The SCHED_TS scheduling policy is a basic timeshare scheduling
             policy.  All SCHED_TS processes acquire CPU resources in
             proportion to their priority or nice value.  Processes aquire the
             processor for a time quantum, the length of which is returned via
             the sched_rr_get_interval(2) system call.


     SCHED_OTHER
             The SCHED_OTHER scheduling policy is equivalent to the SCHED_TS
             policy and allows a program to indicate that it no longer needs a
             real-time scheduling policy in a portable manner.

     SCHED_NP
             The SCHED_NP scheduling policy is a deprecated method for keeping
             individual processes from preempting other processes.  The
             sysmp(2) system call with the MP_NONPREEMPTIVE option should be
             used instead.

     The parameters of the selected policy are specified by the parameter
     structure at address param.

     The priority of the target process may be modified by setting the desired
     priority value in the sched_priority field of the param structure.

     Unlike IRIX 6.2 and previous releases, processes having a higher
     numerical priority value are more important than processes having a lower
     numerical priority value.  Specified priorities remain fixed, unless
     explicitly changed in the future, and are not affected by priority aging
     schemes.

     The priority range for these scheduling policies may be obtained via the
     sched_get_priority_min(2) and sched_get_priority_max(2) function calls.
     However, arbitrary priority values should not be used.  Developers must
     consider the needs of the application and how it should interact with the
     rest of the system, before selecting a real-time priority.  For more
     information, see the "Real-Time Priority Band" section of realtime(5).

     Runnable processes scheduled with real-time policies are always granted
     processor control ahead of timeshare processes, regardless of priority.

     The calling process must have the CAP_SCHED_MGT capability [see
     capability] to successfully execute sched_setscheduler.

     If the process specified by pid is currently executing or is in a
     runnable state, sched_setscheduler causes the process to be rescheduled
     in accordance with its priority.

     sched_setscheduler will fail if one or more of the following are true:

     [EINVAL]       The policy argument does not represent a valid posix
                    scheduling policy.

     [EINVAL]       One of the specified parameters at address param are out
                    of range or scope.

     [EPERM]        The calling process does not have the CAP_SCHED_MGT
                    capability.


     [ESRCH]        The process specified by pid does not exist.

SEE ALSO
     capability(4), realtime(5), sched_getparam(2), sched_setparam(2),
     sched_getscheduler(2), sched_yield(2), sched_get_priority_max(2),
     sched_get_priority_min(2), sched_rr_get_interval(2), sysmp(2),
     pthreads(5)

DIAGNOSTICS
     Upon successful completion, sched_setscheduler returns the previous
     scheduling policy value of the process pid.

     Upon failure, a value of -1 is returned to the calling process and errno
     is set to indicate the error.


                                                                        Page 3