Как запустить программу с помощью политики SCHED_RR из командной строки?

По умолчанию программы запускаются с использованием режима «Общий доступ времени» (политика TS) в Linux. Как запустить программу с политикой SCHED_RR в Linux из командной строки?

Спасибо за предоставление информации о команде chrt (1). Я использовал команду для запуска Firefox с политикой RR, но, как вы видите ниже, только основной поток Firefox работает с политикой RR. Не могли бы вы рассказать мне, как запускать все другие потоки Firefox и с политикой RR.

$ ps -Lo pid,tid,class 2051 PID TID CLS 2051 2051 RR 2051 2055 TS 2051 2056 TS 2051 2057 TS 2051 2058 TS 2051 2059 TS 2051 2060 TS 2051 2061 TS 2051 2063 TS 2051 2067 TS 2051 2068 TS 2051 2069 TS 2051 2070 TS 2051 2072 TS 2051 2073 TS 2051 2074 TS 2051 2075 TS 2051 2077 TS 2051 2078 TS 2051 2080 TS 2051 2356 RR 2051 2386 TS 2051 2387 TS

Edit: Я выполнил следующую простую программу pthreads и протестировал, как указано выше. К сожалению, команда chrt изменяет класс основного потока. См. Ниже.

$ ps -Lo pid,tid,class 3552 PID TID CLS 3552 3552 TS 3552 3553 TS 3552 3554 TS 3552 3555 TS 3552 3556 TS 3552 3557 TS $ sudo chrt --rr -p 30 3552 ... $ ps -Lo pid,tid,class 3552 PID TID CLS 3552 3552 RR 3552 3553 TS 3552 3554 TS 3552 3555 TS 3552 3556 TS 3552 3557 TS

---- Программа ----

#include <pthread.h> #include <stdio.h> #define NUM_THREADS 5 void *PrintHello(void *threadid) { long tid; tid = (long)threadid; printf("Hello World! It's me, thread #%ld!\n", tid); long k = 1; long a[10000]; int i = 1; long b[10000]; for (k = 0; k < 400000000; k++) { if (i == 9999) { i = 1; } a[i] = ((k + i) * (k - i))/2; a[i] = k/2; b[i] = i * 20; b[i] = a[i] - b[i]; i++; int j = 0; for (j = 0; j < i; j++) { k = j - i; } } pthread_exit(NULL); } int main (int argc, char *argv[]) { pthread_t threads[NUM_THREADS]; int rc; long t; for(t=0; t<NUM_THREADS; t++){ printf("In main: creating thread %ld\n", t); rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t); if (rc){ printf("ERROR; return code from pthread_create() is %d\n", rc); exit(-1); } } pthread_exit(NULL); }
7
задан 30 June 2011 в 23:42

8 ответов

Используйте команду chrt с chrt --rr <priority between 1-99> <command>

Пример:

chrt --rr 99 ls

Обратите внимание, что для параметра SCHED_RR требуются права root, поэтому вам либо нужно быть root, либо запустите его с помощью sudo.

Вы также можете использовать chrt, чтобы дать приоритет текущего процесса:

chrt -p --rr <priority between 1-99> <pid>

Те же команды применяются для других классы планирования также, хотя и с другим параметром вместо -rr:

Scheduling policies:
  -b | --batch         set policy to SCHED_BATCH
  -f | --fifo          set policy to SCHED_FIFO
  -i | --idle          set policy to SCHED_IDLE
  -o | --other         set policy to SCHED_OTHER
  -r | --rr            set policy to SCHED_RR (default)

Edit:

В случае Firefox это должно быть просто для Firefox. В многопоточном приложении я написал сам, все потоки сохраняют класс RR. Как видно из вашего вывода, два потока имеют класс RR, поэтому он также является не только родительским потоком.

Редактирование 2:

Попробуйте запустить процесс с помощью chrt вместо перенастройки существующий pid. Похоже, что если вы перепланируете, только первый поток получает класс RR. Однако, если вы начинаете его с chrt, каждый поток получает его.

8
ответ дан 25 May 2018 в 20:01
  • 1
    Спасибо @Egil. Кстати, класс планирования по умолчанию имеет право TS. Вы можете увидеть в выводе команды ps. – samarasa 30 June 2011 в 22:33
  • 2
    Да ... они работают таким образом. SOmehow, он не работает, если мы даем pid. – samarasa 1 July 2011 в 00:53
  • 3
    слишком мало -r (используется только дважды), я предлагаю вместо этого использовать -rrrrrrrrr; -P – poige 2 September 2017 в 06:23
  • 4
    Мне не нужно было запускать root на моем конце ... – enigmaticPhysicist 11 December 2017 в 03:00
  • 5
    @samarasa: возможно, опция - то, что вам нужно. Из руководства: -a, --all-tasks Set or retrieve the scheduling attributes of all the tasks (threads) for a given PID. – Narcolessico 2 February 2018 в 13:34

Используйте команду chrt с chrt --rr <priority between 1-99> <command>

Пример:

chrt --rr 99 ls

Обратите внимание, что для параметра SCHED_RR требуются права root, поэтому вам либо нужно быть root, либо запустите его с помощью sudo.

Вы также можете использовать chrt, чтобы дать приоритет текущего процесса:

chrt -p --rr <priority between 1-99> <pid>

Те же команды применяются для других классы планирования также, хотя и с другим параметром вместо -rr:

Scheduling policies: -b | --batch set policy to SCHED_BATCH -f | --fifo set policy to SCHED_FIFO -i | --idle set policy to SCHED_IDLE -o | --other set policy to SCHED_OTHER -r | --rr set policy to SCHED_RR (default)

Edit:

В случае Firefox это должно быть просто для Firefox. В многопоточном приложении я написал сам, все потоки сохраняют класс RR. Как видно из вашего вывода, два потока имеют класс RR, поэтому он также является не только родительским потоком.

Редактирование 2:

Попробуйте запустить процесс с помощью chrt вместо перенастройки существующий pid. Похоже, что если вы перепланируете, только первый поток получает класс RR. Однако, если вы начинаете его с chrt, каждый поток получает его.

9
ответ дан 25 July 2018 в 21:38

Используйте команду chrt с chrt --rr <priority between 1-99> <command>

Пример:

chrt --rr 99 ls

Обратите внимание, что для параметра SCHED_RR требуются права root, поэтому вам либо нужно быть root, либо запустите его с помощью sudo.

Вы также можете использовать chrt, чтобы дать приоритет текущего процесса:

chrt -p --rr <priority between 1-99> <pid>

Те же команды применяются для других классы планирования также, хотя и с другим параметром вместо -rr:

Scheduling policies: -b | --batch set policy to SCHED_BATCH -f | --fifo set policy to SCHED_FIFO -i | --idle set policy to SCHED_IDLE -o | --other set policy to SCHED_OTHER -r | --rr set policy to SCHED_RR (default)

Edit:

В случае Firefox это должно быть просто для Firefox. В многопоточном приложении я написал сам, все потоки сохраняют класс RR. Как видно из вашего вывода, два потока имеют класс RR, поэтому он также является не только родительским потоком.

Редактирование 2:

Попробуйте запустить процесс с помощью chrt вместо перенастройки существующий pid. Похоже, что если вы перепланируете, только первый поток получает класс RR. Однако, если вы начинаете его с chrt, каждый поток получает его.

9
ответ дан 2 August 2018 в 03:15

Используйте команду chrt с chrt --rr <priority between 1-99> <command>

Пример:

chrt --rr 99 ls

Обратите внимание, что для параметра SCHED_RR требуются права root, поэтому вам либо нужно быть root, либо запустите его с помощью sudo.

Вы также можете использовать chrt, чтобы дать приоритет текущего процесса:

chrt -p --rr <priority between 1-99> <pid>

Те же команды применяются для других классы планирования также, хотя и с другим параметром вместо -rr:

Scheduling policies: -b | --batch set policy to SCHED_BATCH -f | --fifo set policy to SCHED_FIFO -i | --idle set policy to SCHED_IDLE -o | --other set policy to SCHED_OTHER -r | --rr set policy to SCHED_RR (default)

Edit:

В случае Firefox это должно быть просто для Firefox. В многопоточном приложении я написал сам, все потоки сохраняют класс RR. Как видно из вашего вывода, два потока имеют класс RR, поэтому он также является не только родительским потоком.

Редактирование 2:

Попробуйте запустить процесс с помощью chrt вместо перенастройки существующий pid. Похоже, что если вы перепланируете, только первый поток получает класс RR. Однако, если вы начинаете его с chrt, каждый поток получает его.

9
ответ дан 4 August 2018 в 19:09

Используйте команду chrt с chrt --rr <priority between 1-99> <command>

Пример:

chrt --rr 99 ls

Обратите внимание, что для параметра SCHED_RR требуются права root, поэтому вам либо нужно быть root, либо запустите его с помощью sudo.

Вы также можете использовать chrt, чтобы дать приоритет текущего процесса:

chrt -p --rr <priority between 1-99> <pid>

Те же команды применяются для других классы планирования также, хотя и с другим параметром вместо -rr:

Scheduling policies: -b | --batch set policy to SCHED_BATCH -f | --fifo set policy to SCHED_FIFO -i | --idle set policy to SCHED_IDLE -o | --other set policy to SCHED_OTHER -r | --rr set policy to SCHED_RR (default)

Edit:

В случае Firefox это должно быть просто для Firefox. В многопоточном приложении я написал сам, все потоки сохраняют класс RR. Как видно из вашего вывода, два потока имеют класс RR, поэтому он также является не только родительским потоком.

Редактирование 2:

Попробуйте запустить процесс с помощью chrt вместо перенастройки существующий pid. Похоже, что если вы перепланируете, только первый поток получает класс RR. Однако, если вы начинаете его с chrt, каждый поток получает его.

9
ответ дан 6 August 2018 в 03:26

Используйте команду chrt с chrt --rr & lt; priority между 1-99 & gt; & lt; command & gt;

Пример:

  chrt --rr 99 ls  

Обратите внимание, что установка SCHED_RR требует прав root, поэтому вам нужно либо root, либо запустить его с помощью sudo.

Вы также можете использовать chrt , чтобы дать приоритет текущего процесса: [ ! d12]

chrt -p --rr & lt; приоритет между 1-99 & gt; & lt; pid & gt;

Те же команды применяются и для других классов планирования, хотя с другим параметром вместо -rr:

  Политики планирования:  b |  - установить политику набора для SCHED_BATCH -f |  --fifo установить политику для SCHED_FIFO -i |  - задайте политику для SCHED_IDLE -o |  - другая политика установки для SCHED_OTHER -r |  --rr установить политику для SCHED_RR (по умолчанию)  

Изменить:

В случае Firefox это должно быть просто для Firefox. В многопоточном приложении я написал сам, все потоки сохраняют класс RR. Как видно из вашего вывода, два потока имеют класс RR, поэтому это не только родительский поток.

Редактировать 2:

Попробуйте запустить процесс с помощью chrt вместо перенастройки существующего pid. Похоже, что если вы перепланируете, только первый поток получает класс RR. Однако, если вы начинаете его с chrt , каждый поток получает его.

9
ответ дан 7 August 2018 в 21:13

Используйте команду chrt с chrt --rr & lt; priority между 1-99 & gt; & lt; command & gt;

Пример:

  chrt --rr 99 ls  

Обратите внимание, что установка SCHED_RR требует прав root, поэтому вам нужно либо root, либо запустить его с помощью sudo.

Вы также можете использовать chrt , чтобы дать приоритет текущего процесса: [ ! d12]

chrt -p --rr & lt; приоритет между 1-99 & gt; & lt; pid & gt;

Те же команды применяются и для других классов планирования, хотя с другим параметром вместо -rr:

  Политики планирования:  b |  - установить политику набора для SCHED_BATCH -f |  --fifo установить политику для SCHED_FIFO -i |  - задайте политику для SCHED_IDLE -o |  - другая политика установки для SCHED_OTHER -r |  --rr установить политику для SCHED_RR (по умолчанию)  

Изменить:

В случае Firefox это должно быть просто для Firefox. В многопоточном приложении я написал сам, все потоки сохраняют класс RR. Как видно из вашего вывода, два потока имеют класс RR, поэтому это не только родительский поток.

Редактировать 2:

Попробуйте запустить процесс с помощью chrt вместо перенастройки существующего pid. Похоже, что если вы перепланируете, только первый поток получает класс RR. Однако, если вы начинаете его с chrt , каждый поток получает его.

9
ответ дан 10 August 2018 в 09:32

Используйте команду chrt с chrt --rr & lt; priority между 1-99 & gt; & lt; command & gt;

Пример:

  chrt --rr 99 ls  

Обратите внимание, что установка SCHED_RR требует прав root, поэтому вам нужно либо root, либо запустить его с помощью sudo.

Вы также можете использовать chrt , чтобы дать приоритет текущего процесса: [ ! d12]

chrt -p --rr & lt; приоритет между 1-99 & gt; & lt; pid & gt;

Те же команды применяются и для других классов планирования, хотя с другим параметром вместо -rr:

  Политики планирования:  b |  - установить политику набора для SCHED_BATCH -f |  --fifo установить политику для SCHED_FIFO -i |  - задайте политику для SCHED_IDLE -o |  - другая политика установки для SCHED_OTHER -r |  --rr установить политику для SCHED_RR (по умолчанию)  

Изменить:

В случае Firefox это должно быть просто для Firefox. В многопоточном приложении я написал сам, все потоки сохраняют класс RR. Как видно из вашего вывода, два потока имеют класс RR, поэтому это не только родительский поток.

Редактировать 2:

Попробуйте запустить процесс с помощью chrt вместо перенастройки существующего pid. Похоже, что если вы перепланируете, только первый поток получает класс RR. Однако, если вы начинаете его с chrt , каждый поток получает его.

9
ответ дан 13 August 2018 в 15:41
  • 1
    Спасибо @Egil. Кстати, класс планирования по умолчанию имеет право TS. Вы можете увидеть в выводе команды ps. – samarasa 30 June 2011 в 22:33
  • 2
    Да ... они работают таким образом. SOmehow, он не работает, если мы даем pid. – samarasa 1 July 2011 в 00:53
  • 3
    слишком мало -r (используется только дважды), я предлагаю вместо этого использовать -rrrrrrrrr ; -P – poige 2 September 2017 в 06:23
  • 4
    Мне не нужно было запускать root на моем конце ... – enigmaticPhysicist 11 December 2017 в 03:00
  • 5
    @samarasa: возможно, опция - то, что вам нужно. Из руководства: -a, -all-tasks Устанавливать или извлекать атрибуты планирования всех задач (потоков) для заданного PID. – Narcolessico 2 February 2018 в 13:34

Другие вопросы по тегам:

Похожие вопросы: