---
name: "sched_setscheduler"
section: "2"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/sched_getscheduler"
---

# sched\_setscheduler(2)

set/get scheduling policy and scheduler parameters

Part of [sched\_getscheduler(2)](/sched_getscheduler/2.md).

## NAME

**sched\_setscheduler**, **sched\_getscheduler** – set/get scheduling policy and scheduler parameters

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

**#include \<sched.h\>**

*int*\

**sched\_setscheduler**(*pid\_t pid*, *int policy*, *const struct sched\_param \*param*);

*int*\

**sched\_getscheduler**(*pid\_t pid*);

## DESCRIPTION

The **sched\_setscheduler**() system call sets the scheduling policy and scheduling parameters of the process specified by *pid* to *policy* and the parameters specified in the *sched\_param* structure pointed to by *param*, respectively. The value of the *sched\_priority* member in the *param* structure must be any integer within the inclusive priority range for the scheduling policy specified by *policy*.

In this implementation, if the value of *pid* is negative the system call will fail.

If a process specified by *pid* exists and if the calling process has permission, the scheduling policy and scheduling parameters will be set for the process whose process ID is equal to *pid*.

If *pid* is zero, the scheduling policy and scheduling parameters are set for the calling process.

In this implementation, the policy of when a process can affect the scheduling parameters of another process is specified in IEEE Std 1003.1b-1993 (“POSIX.1b”) as a write-style operation.

The scheduling policies are in *\<sched.h\>*:

- \[SCHED\_FIFO\]

  First-in-first-out fixed priority scheduling with no round robin scheduling;

- \[SCHED\_OTHER\]

  The standard time sharing scheduler;

- \[SCHED\_RR\]

  Round-robin scheduling across same priority processes.

The *sched\_param* structure is defined in *\<sched.h\>*:

```
struct sched_param {
	int sched_priority;	/* scheduling priority */
};
```

The **sched\_getscheduler**() system call returns the scheduling policy of the process specified by *pid*.

If a process specified by *pid* exists and if the calling process has permission, the scheduling parameters for the process whose process ID is equal to *pid* are returned.

In this implementation, the policy of when a process can obtain the scheduling parameters of another process are detailed in IEEE Std 1003.1b-1993 (“POSIX.1b”) as a read-style operation.

If *pid* is zero, the scheduling parameters for the calling process will be returned. In this implementation, the *sched\_getscheduler* system call will fail if *pid* is negative.

## RETURN VALUES

The **sched\_setscheduler()** function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

## ERRORS

On failure *errno* will be set to the corresponding value:

- \[ENOSYS\]

  The system is not configured to support this functionality.

- \[EPERM\]

  The requesting process doesn not have permission as detailed in IEEE Std 1003.1b-1993 (“POSIX.1b”).

- \[ESRCH\]

  No process can be found corresponding to that specified by *pid*.

- \[EINVAL\]

  The value of the *policy* argument is invalid, or one or more of the parameters contained in *param* is outside the valid range for the specified scheduling policy.

## SEE ALSO

[sched\_get\_priority\_max(2)](/sched_get_priority_max/2.md), [sched\_get\_priority\_min(2)](/sched_get_priority_min/2.md), [sched\_getparam(2)](/sched_getparam/2.md), [sched\_rr\_get\_interval(2)](/sched_rr_get_interval/2.md), [sched\_setparam(2)](/sched_setparam/2.md), [sched\_yield(2)](/sched_yield/2.md)

## STANDARDS

The **sched\_setscheduler**() and **sched\_getscheduler**() system calls conform to IEEE Std 1003.1b-1993 (“POSIX.1b”).
