Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ rtprio(2) — HP-UX 10.20

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

rtprio(1)

getprivgrp(2)

nice(2)

plock(2)

rtprio(2)

NAME

rtprio − change or read real-time priority

SYNOPSIS

#include <sys/rtprio.h>

int rtprio(pid_t pid, int prio);

DESCRIPTION

The rtprio() system call sets or reads the real-time priority of a process. 

If pid is zero, it specifies the calling process; otherwise, it specifies the process ID of a process. 

When setting the real-time priority of another process, the real or effective user ID of the calling process must match the real or saved user ID of the process to be modified, or the effective user ID of the calling process must be that of a user having appropriate privileges.  The calling process must also be a member of a privilege group allowing rtprio() (see getprivgrp(2)) or the effective user ID of the calling process must be a user having appropriate privileges. 

Simply reading real-time priorities requires no special privilege. 

Real-time scheduling policies differ from normal timesharing policies in that the real-time priority is used to absolutely order all real-time processes.  This priority is not degraded over time.  All real-time processes are of higher priority than normal user and system processes, although some system processes may run at real-time priorities.  If there are several eligible processes at the same priority level, they are run in a round robin fashion as long as no process with a higher priority intervenes.  A real-time process receives CPU service until it either voluntarily gives up the CPU or is preempted by a process of equal or higher priority.  Interrupts can also preempt a real-time process. 

Valid real-time priorities run from zero to 127.  Zero is the highest (most important) priority.  This real-time priority is inherited across forks (see fork(2)) and execs (see exec(2)).

prio can have the following values:

0 to 127 Set the process to this real-time priority. 

RTPRIO_NOCHG Do not change the real-time priority.  This is used to read the process real-time priority. 

RTPRIO_RTOFF Set the process to no longer have a real-time priority.  It resumes a normal timesharing priority. 

Any process, regardless of privilege, is allowed to turn off its own real-time priority using a pid of zero. 

RETURN VALUE

rtprio() returns the following values:

0 to 127 The process was a real-time process.  The value is the process’s former (before the call) real-time priority. 

RTPRIO_RTOFF The process was not a real-time process. 

-1 An error occurred.  errno is set to indicate the error. 

ERRORS

If rtprio() fails, errno is set to one of the following values:

[EINVAL] prio is not RTPRIO_NOCHG, RTPRIO_RTOFF, or in the range 0 to 127. 

[EPERM] The calling process is not a user having appropriate privileges, and neither its real nor effective user ID match the real or saved user ID of the process indicated by pid.

[EPERM] The group access list of the calling process does not contain a group having PRIV_RTPRIO capability and prio is not RTPRIO_NOCHG, or RTPRIO_RTOFF with a pid of zero. 

[ESRCH] No process can be found corresponding to that specified by pid. 

EXAMPLES

The following call to rtprio() sets the calling process to a real-time priority of 90:

rtprio(0, 90);

WARNINGS

Normally, compute-bound programs should not be run at real-time priorities, because all timesharing work on the CPU would come to a complete halt. 

DEPENDENCIES

Series 800

Because processes executing at real-time priorities get scheduling preference over a system process executing at a lower priority, unexpected system behavior can occur after a power failure on systems that support power-fail recovery.  For example, when init (see init(1M)) receives the powerfail signal SIGPWR, it normally reloads programmable hardware such as terminal multiplexers.  If a higher-priority real-time process is eligible to run after the power failure, the running of init is delayed.  This condition temporarily prevents terminal input to any process, including real-time shells of higher priority than the eligible real-time process.  To avoid this situation, a real-time process should catch SIGPWR and suspend itself until init has finished its powerfail processing. 

AUTHOR

rtprio() was developed by HP. 

SEE ALSO

rtprio(1), getprivgrp(2), nice(2), plock(2). 

Hewlett-Packard Company  —  HP-UX Release 10.20:  July 1996

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026