Files
linux-legacy/include/linux
Lennart Poettering 29d449ffbc sched: Introduce SCHED_RESET_ON_FORK scheduling policy flag
This patch introduces a new flag SCHED_RESET_ON_FORK which can be passed
to the kernel via sched_setscheduler(), ORed in the policy parameter. If
set this will make sure that when the process forks a) the scheduling
priority is reset to DEFAULT_PRIO if it was higher and b) the scheduling
policy is reset to SCHED_NORMAL if it was either SCHED_FIFO or SCHED_RR.

Why have this?

Currently, if a process is real-time scheduled this will 'leak' to all
its child processes. For security reasons it is often (always?) a good
idea to make sure that if a process acquires RT scheduling this is
confined to this process and only this process. More specifically this
makes the per-process resource limit RLIMIT_RTTIME useful for security
purposes, because it makes it impossible to use a fork bomb to
circumvent the per-process RLIMIT_RTTIME accounting.

This feature is also useful for tools like 'renice' which can then
change the nice level of a process without having this spill to all its
child processes.

Why expose this via sched_setscheduler() and not other syscalls such as
prctl() or sched_setparam()?

prctl() does not take a pid parameter. Due to that it would be
impossible to modify this flag for other processes than the current one.

The struct passed to sched_setparam() can unfortunately not be extended
without breaking compatibility, since sched_setparam() lacks a size
parameter.

How to use this from userspace? In your RT program simply replace this:

  sched_setscheduler(pid, SCHED_FIFO, &param);

by this:

  sched_setscheduler(pid, SCHED_FIFO|SCHED_RESET_ON_FORK, &param);

Signed-off-by: Lennart Poettering <lennart@poettering.net>
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <20090615152714.GA29092@tango.0pointer.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
(cherry picked from commit ca94c442535a44d508c99a77e54f21a59f4fc462)
2011-02-03 08:25:26 -06:00
..
2009-06-18 08:46:47 +10:00
2010-12-03 05:46:21 -06:00
2009-07-12 12:22:34 -07:00
2009-06-17 00:36:36 -04:00
2010-08-10 11:51:04 -05:00
2009-06-30 18:55:58 -07:00
2009-06-01 06:21:13 +00:00
2009-04-23 10:06:35 +01:00
2009-06-11 21:36:09 -04:00
2011-01-30 00:29:24 -08:00
2009-07-29 19:10:35 -07:00
2009-07-12 12:22:34 -07:00
2009-05-29 08:40:01 -07:00
2010-08-10 11:44:23 -05:00
2009-06-11 08:50:57 -07:00
2009-06-11 21:36:06 -04:00
2010-12-06 00:32:03 -06:00
2009-06-22 10:12:30 +01:00
2009-05-18 14:46:26 +01:00
2011-01-30 00:29:25 -08:00
2009-06-17 09:33:49 -07:00
2009-07-08 09:18:05 -07:00
2009-06-24 08:17:04 -04:00
2009-06-15 21:30:25 -07:00
2009-06-30 20:12:24 +02:00
2009-06-18 13:04:05 -07:00
2009-07-12 12:22:34 -07:00
2009-06-03 14:05:10 -04:00
2009-05-19 16:02:02 -07:00
2009-06-29 08:59:10 +10:00
2009-06-02 00:45:24 -07:00
2009-06-18 13:03:57 -07:00
2009-05-18 14:46:26 +01:00
2009-07-31 08:55:48 +02:00
2009-06-18 13:03:56 -07:00
2009-04-21 13:41:48 -07:00
2009-04-21 13:41:48 -07:00
2009-06-15 15:49:23 +02:00
2010-08-10 11:50:18 -05:00
2009-04-06 16:06:26 +01:00
2009-06-23 20:21:39 +01:00
2009-07-30 16:03:45 +09:30
2009-06-16 19:47:57 -07:00
2009-04-28 07:37:28 +02:00
2009-04-14 09:00:19 +10:00
2010-12-07 07:10:30 -06:00
2009-06-16 08:40:20 +02:00
2009-04-29 17:32:35 -07:00
2009-06-11 19:05:32 +02:00
2009-05-25 00:55:45 -07:00
2009-07-08 09:31:56 -07:00
2009-06-18 13:03:57 -07:00
2009-06-11 21:36:02 -04:00
2009-06-11 21:36:01 -04:00
2009-06-17 18:02:11 -07:00
2009-06-17 18:02:11 -07:00
2009-06-17 12:24:34 -07:00
2009-08-12 08:21:39 -07:00
2009-06-17 12:24:34 -07:00
2009-06-17 18:02:11 -07:00
2009-06-15 21:44:43 -07:00
2009-06-29 12:14:51 -07:00
2009-06-30 18:55:59 -07:00
2009-04-24 08:54:21 +02:00
2009-06-18 13:04:04 -07:00
2009-07-29 19:10:36 -07:00
2009-06-11 21:36:12 -04:00
2009-07-12 12:22:34 -07:00
2009-06-24 08:17:06 -04:00
2009-05-09 10:49:41 -04:00
2011-01-29 20:58:08 -08:00
2009-04-08 14:33:38 -07:00
2009-06-11 08:50:58 -07:00
2009-04-13 15:04:29 -07:00
2009-12-08 10:22:01 -08:00
2009-06-15 15:50:49 +02:00
2009-04-21 19:40:00 -07:00
2009-06-16 19:47:48 -07:00
2009-04-27 02:45:02 -07:00
2010-12-07 07:10:30 -06:00
2009-07-06 13:57:03 -07:00
2009-06-11 08:50:59 -07:00
2009-10-05 09:32:34 -07:00