Есть ли способ отправить некоторые процессы с известным pid в фоновом режиме? - PullRequest
1 голос
/ 13 июня 2011

Я новичок в Linux и системном программировании. Я хочу написать программу на c, которая находит процессы, у которых загрузка процессора превышает заданное значение, и отправляет их в фоновый режим.

любой может мне помочь! Я действительно ценю это

Ответы [ 5 ]

4 голосов
/ 13 июня 2011

Я вполне уверен, что вы спрашиваете, что вы хотите определить, использует ли процесс количество процессоров X и, если это так, снимите его с процессора на некоторое время. Уже есть часть программного обеспечения, которая делает это: она называется ядром. Я не знаю ни одного способа программно отключить другой процесс от ЦП, если только эта другая программа не поддерживает внешний интерфейс для уменьшения его нагрузки.

Скорее всего, вы действительно хотите настроить nice и другие параметры планировщика запущенного процесса, чтобы ядру больше хотелось снимать его с процессора, когда другая программа должна работать.

Но какую основную проблему вы действительно пытаетесь решить здесь? Может быть, если вы скажете нам, что мы можем предложить альтернативное решение.

2 голосов
/ 13 июня 2011

Пожалуйста, посмотрите на исходный код утилит управления процессами, например:

  • HTOP
  • top (стандартная команда unix)
  • ps (стандартная команда unix)
1 голос
/ 13 июня 2011

ИМХО, нельзя.

Фоновое управление обеспечивает оболочка. Таким образом, & интерпретируется, например, командой / bin / bash. При нажатии CTRL-Z ядро ​​останавливает текущее fg-задание, и снова вашей оболочкой вы можете отправить его в фоновый режим.

Вы ищете способ удаленного управления оболочкой для запуска какой-либо программы в fg. Я не знаю никакого способа «дистанционного управления».

Ofc, вот альтернативные решения, например:

  • используйте команду screen, и вы можете вызвать конкретный экран в свой терминал и вручную отправить процесс в bg.
  • или вы можете использовать утилиту совместного использования экрана, чтобы обогнать определенный терминал и CTRL-Z, bg
  • или вы можете установить исправление bash и добавить функцию удаленного управления. ;)

или вот что я не знаю. ;) - хм, может быть trap какой-нибудь код обработки пользовательских сигналов в / etc / profile?

Вы можете прочитать немного о здесь: http://en.wikipedia.org/wiki/Process_group

Честно говоря, после получаса размышлений я не понимаю, почему вы хотите удаленно (из другого терминала - по его PID) отправить некоторые процессы из fg в bg. Не дай мне смысла.

Подскажите, пожалуйста, чего вы хотите достичь?

0 голосов
/ 15 июня 2011

«+» означает, что программа «находится в группе процессов переднего плана».Однако я не верю, что это состояние вообще влияет на планирование процесса.

Однако вы можете изменить его с помощью tcsetpgrp.

со страницы руководства: «Функция tcsetpgrp() делает группу процессов с идентификатором группы процессов pgrp приоритетной группой процессов на терминале, связанном с fd, который должен быть управляющим терминалом вызывающего процесса и все же быть связанным с его сеансом. Кроме того, pgrp должен быть (непусто) группа процессов, принадлежащая тому же сеансу, что и вызывающий процесс. "

Насколько я понимаю, вы просто вызываете эту функцию и делаете оболочку (или другую программу) приоритетным процессом.

0 голосов
/ 13 июня 2011

Возможно, вы хотите уменьшить приоритет процесса, но я не уверен, что это хорошая идея.

Обычно мы отправляем процесс в фоновый режим на приглашение свободной оболочки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...