sched_setscheduler()

Updated: April 19, 2023

Change the priority and scheduling policy of a process

Synopsis:

#include <sched.h>

int sched_setscheduler( 
          pid_t pid,
          int policy,
          const struct sched_param *param );

Arguments:

pid
The ID of the process whose priority and scheduling policy you want to set, or zero if you want to set them for the current process.
policy
The scheduling policy, which must be one of:
  • SCHED_FIFO — a fixed-priority scheduler in which the highest priority ready thread runs until it blocks or is preempted by a higher priority thread.
  • SCHED_RR — similar to SCHED_FIFO, except that threads at the same priority level timeslice (round robin) every 4 × the clock period (see ClockPeriod()).
  • SCHED_OTHER — currently the same as SCHED_RR.
  • SCHED_SPORADIC — sporadic scheduling.

For more information, see Thread scheduling in the QNX Neutrino Microkernel chapter of the System Architecture guide.

param
A pointer to a sched_param structure whose sched_priority member holds the priority that you want to assign to the process.

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.

Description:

The sched_setscheduler() function changes the priority of process pid to that of the sched_priority member in the sched_param structure passed as param, and the scheduling policy is set to policy.

If pid is zero, the policy and priority of the calling process are set.

Note:
  • In QNX Neutrino, scheduling is associated with threads, not processes, so sched_setscheduler() sets the scheduling policy for thread 1 in the process pid, or for the calling thread if pid is 0.
  • In order to set the scheduling policy and priority for a process whose user ID is different from the calling process's real or effective user ID, your process must have the PROCMGR_AID_SCHEDULE ability enabled. In order to change its priority to a value above the maximum permitted for unprivileged processes, your process must have the PROCMGR_AID_PRIORITY ability enabled. For more information, see procmgr_ability().

The sched_priority member in param must lie between the minimum and maximum values returned by sched_get_priority_max() and sched_get_priority_min().

By default, the process priority and scheduling policy are inherited from or explicitly set by the parent process. Once running, the child process may change its priority by using this function.

Returns:

The previous scheduling policy, or -1 if an error occurs (errno is set).

Errors:

EFAULT
A fault occurred trying to access the buffers provided.
EINVAL
The priority or scheduling policy isn't a valid value.
EPERM
The calling process doesn't have the required permission; see procmgr_ability().
ESRCH
The process pid doesn't exist.

Examples:

See sched_getparam().

Classification:

POSIX 1003.1 PS

Safety:  
Cancellation point No
Interrupt handler No
Signal handler Yes
Thread Yes