Запуск и остановка разветвленного процесса

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

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

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

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


person titaniumdecoy    schedule 23.12.2008    source источник


Ответы (3)


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

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

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

person Iocio    schedule 23.12.2008

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

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

person Charlie Martin    schedule 23.12.2008

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

person PolyThinker    schedule 23.12.2008