[Previous] [Contents] [Index] [Next]

sched_setscheduler()

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 );

Library:

libc

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.

The policy parameter must be one of:

SCHED_FIFO
A fixed priority scheduler in which the highest priority, ready process runs until it blocks or is preempted by a higher priority process.
SCHED_RR
The same as SCHED_FIFO, except processes at the same priority level time slice (round robin).
SCHED_OTHER
Currently the same as SCHED_RR.

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, process priority and scheduling algorithm are inherited from or explicitly set by the parent process. Once running, the child process may change its priority 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 sufficient privilege to set the priority.
ESRCH
The process pid doesn't exist.

Classification:

POSIX 1003.1 (Realtime Extensions)

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

Caveats:

Currently, the implementation of sched_setscheduler() isn't 100% POSIX 1003.1-1996. The sched_setscheduler() function sets the scheduling policy for thread 1 in the process pid, or for the calling thread if pid is 0.

If you depend on this in new code, it won't be portable. POSIX 1003.1 says sched_setscheduler() should return -1 and set errno to EPERM in a multithreaded application.

See also:

errno, getprio(), sched_getparam(), sched_get_priority_max(), sched_get_priority_min(), sched_getscheduler(), sched_setparam(), sched_yield(), setprio()


[Previous] [Contents] [Index] [Next]