summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarel Zak2011-05-05 14:23:22 +0200
committerKarel Zak2011-05-05 14:23:38 +0200
commit503cbbe1d4f2e5113fa709b005780bb376f83656 (patch)
tree1451d39e2bae88a196ef7f24e168f233979a83bf
parentchrt: make threads aware (diff)
downloadkernel-qcow2-util-linux-503cbbe1d4f2e5113fa709b005780bb376f83656.tar.gz
kernel-qcow2-util-linux-503cbbe1d4f2e5113fa709b005780bb376f83656.tar.xz
kernel-qcow2-util-linux-503cbbe1d4f2e5113fa709b005780bb376f83656.zip
chrt: allow to use --all-tasks when retrieve info
master thread: $ chrt --pid $(pidof firefox) all threads: $ chrt --all-tasks --pid $(pidof firefox) Signed-off-by: Karel Zak <kzak@redhat.com>
-rw-r--r--schedutils/chrt.13
-rw-r--r--schedutils/chrt.c18
2 files changed, 16 insertions, 5 deletions
diff --git a/schedutils/chrt.1 b/schedutils/chrt.1
index c5d87f97d..89664d680 100644
--- a/schedutils/chrt.1
+++ b/schedutils/chrt.1
@@ -66,7 +66,8 @@ since Linux 2.6.31.
operate on an existing PID and do not launch a new task
.TP
.B -a, --all-tasks
-propagate changes to all the tasks (threads) for a given PID.
+set or retrieve the scheduling attributes of the all tasks (threads) for a
+given PID.
.TP
.B -b, --batch
set scheduling policy to
diff --git a/schedutils/chrt.c b/schedutils/chrt.c
index 3669ba6a8..fca347678 100644
--- a/schedutils/chrt.c
+++ b/schedutils/chrt.c
@@ -188,7 +188,8 @@ static void show_min_max(void)
int main(int argc, char *argv[])
{
- int i, policy = SCHED_RR, priority = 0, verbose = 0, policy_flag = 0, all_tasks = 0;
+ int i, policy = SCHED_RR, priority = 0, verbose = 0, policy_flag = 0,
+ all_tasks = 0;
struct sched_param sp;
pid_t pid = -1;
@@ -268,7 +269,18 @@ int main(int argc, char *argv[])
show_usage(EXIT_FAILURE);
if ((pid > -1) && (verbose || argc - optind == 1)) {
- show_rt_info(pid, FALSE);
+ if (all_tasks) {
+ pid_t tid;
+ struct proc_tasks *ts = proc_open_tasks(pid);
+
+ if (!ts)
+ err(EXIT_FAILURE, "cannot obtain the list of tasks");
+ while (!proc_next_tid(ts, &tid))
+ show_rt_info(tid, FALSE);
+ proc_close_tasks(ts);
+ } else
+ show_rt_info(pid, FALSE);
+
if (argc - optind == 1)
return EXIT_SUCCESS;
}
@@ -296,11 +308,9 @@ int main(int argc, char *argv[])
if (!ts)
err(EXIT_FAILURE, "cannot obtain the list of tasks");
-
while (!proc_next_tid(ts, &tid))
if (sched_setscheduler(tid, policy, &sp) == -1)
err(EXIT_FAILURE, _("failed to set tid %d's policy"), tid);
-
proc_close_tasks(ts);
}
else