Запуск и остановка разветвленного процесса - PullRequest
0 голосов
/ 23 декабря 2008

Может ли родительский процесс запускать и останавливать дочерний (разветвленный) процесс в Unix?

Я хочу реализовать планировщик задач ( см. Здесь ), который может запускать несколько процессов одновременно, что, по моему мнению, требует либо отдельных процессов, либо потоков.

Как я могу остановить выполнение дочернего процесса и возобновить его через определенное время?

(Если это возможно только с потоками, как реализованы потоки?)

Ответы [ 3 ]

2 голосов
/ 23 декабря 2008

Вы можете написать простую имитацию планировщика, используя сигналы. Если у вас есть разрешения, то сигнал stop (SIGSTOP) останавливает выполнение процесса, а сигнал continue (SIGCONT) продолжает его.

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

Проверьте руководства пользователя kill (2) и signal (7). Существует также множество руководств по использованию сигналов Unix в Интернете.

1 голос
/ 23 декабря 2008

Вы можете использовать сигналы, но в обычном мире UNIX, вероятно, проще использовать семафоры. Как только вы установите семафор так, чтобы другой процесс не продолжался, планировщик поменяет его в обычном порядке; когда вы очистите семафор, он снова будет готов к работе.

Конечно, вы можете делать то же самое с потоками; единственное существенное отличие состоит в том, что вы сохраняете тяжелый контекстный переключатель.

0 голосов
/ 23 декабря 2008

Примечание: если вы используете signal (), поведение может отличаться в разных unix-системах. Если вы используете Linux, проверьте раздел «Переносимость» справочной страницы сигнала и справочную страницу sigaction , которая является предпочтительной.

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