sched_setscheduler
![]() |
![]() |
![]() |
![]() |
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 );
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.
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 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 sufficient privilege to set the priority.
- ESRCH
- The process pid doesn't exist.
Examples:
See sched_getparam().
Classification:
| 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_param, sched_setparam(), sched_yield(), setprio()
![]() |
![]() |
![]() |
![]() |

![[Previous]](../prev.gif)
![[Contents]](../contents.gif)
![[Index]](../keyword_index.gif)
![[Next]](../next.gif)
