Ћекции.ќрг


ѕоиск:




 атегории:

јстрономи€
Ѕиологи€
√еографи€
ƒругие €зыки
»нтернет
»нформатика
»стори€
 ультура
Ћитература
Ћогика
ћатематика
ћедицина
ћеханика
ќхрана труда
ѕедагогика
ѕолитика
ѕраво
ѕсихологи€
–елиги€
–иторика
—оциологи€
—порт
—троительство
“ехнологи€
“ранспорт
‘изика
‘илософи€
‘инансы
’ими€
Ёкологи€
Ёкономика
Ёлектроника

 

 

 

 


ѕараметры. Ќекоторые параметры потребуют дальнейшего подробного обсуждени€ в следующих разделах, тогда как смысл многих других станет дл€ вас более пон€тным при




Ќекоторые параметры потребуют дальнейшего подробного обсуждени€ в следующих разделах, тогда как смысл многих других станет дл€ вас более пон€тным при рассмотрении примеров программ.

lpApplicationName и lpCommandLine (последний указатель имеет тип LPTSTR, а не LPCTSTR) Ч используютс€ вместе дл€ указани€ исполн€емой программы и аргументов командной строки, о чем говоритс€ в следующем разделе.

lpsaProcess и lpsaThread Ч указатели на структуры атрибутов защиты процесса и потока. «начени€м NULL соответствует использование атрибутов защиты, заданных по умолчанию, и именно эти значени€ будут использоватьс€ нами вплоть до главы 15, посв€щенной рассмотрению средств безопасности Windows.

bInheritHandles Ч показывает, наследует ли новый процесс наследуемые открытые дескрипторы (файлов, отображений файлов и так далее) из вызывающего процесса. Ќаследуемые дескрипторы имеют те же атрибуты, что и исходные, и их обсуждение будет продолжено в одном из следующих разделов.

dwCreationFlags Ч может объедин€ть в себе несколько флаговых значений, включа€ следующие:

Х CREATE_SUSPENDED Ч указывает на то, что основной поток будет создан в приостановленном состо€нии и начнет выполн€тьс€ лишь после вызова функци€ ResumeThread.

Х DETACHED_PROCESS и CREATE_NEW_CONSOLE Ч взаимоисключающие значени€, которые не должны устанавливатьс€ оба одновременно. ѕервый флаг означает создание нового процесса, у которого консоль отсутствует, а второй Ч процесса, у которого имеетс€ собственна€ консоль. ≈сли ни один из этих флагов не указан, то новый процесс наследует консоль родительского процесса.

Х Create_New_Process_Group Ч указывает на то, что создаваемый процесс €вл€етс€ корневым дл€ новой группы процессов. ≈сли все процессы, принадлежащие данной группе, раздел€ют общую консоль, то все они будут получать управл€ющие сигналы консоли (Ctrl-C или Ctrl-break). ќбработчики управл€ющих сигналов консоли описывались в главе 4, а их применение было продемонстрировано в программе 4.5. ”пом€нутые группы процессов в некотором отношении аналогичны группам процессов UNIX и рассматриваютс€ далее в этой главе.

Ќекоторые из флагов управл€ют приоритетами потоков нового процесса. ќ возможных значени€х этих флагов более подробно говоритс€ в главе 7. ѕока же нам будет достаточно использовать приоритет родительского процесса (этот режим устанавливаетс€ по умолчанию) или указывать значение NORMAL_PRIORITY_CLASS.

lpEnvironment Ч указывает на блок параметров настройки окружени€ нового процесса. ≈сли задано значение NULL, то новый процесс будет использовать значени€ параметров окружени€ родительского процесса. Ѕлок параметров содержит строки, в которых заданы пары "им€-значение", определ€ющие, например, пути доступа к файлам.

lpCurDir Ч указатель на строку, содержащую путь к текущему каталогу нового процесса. ≈сли задано значение NULL, то в качестве текущего каталога будет использоватьс€ рабочий каталог родительского процесса.

lpStartupInfo Ч указатель на структуру, котора€ описывает внешний вид основного окна и содержит дескрипторы стандартных устройств нового процесса. »спользуйте соответствующую информацию из родительского процесса, которую можно получить при помощи функции GetStartupInfo. ћожно поступить и по-другому, обнулив структуру STARTUPINFO перед вызовом функции CreateProcess. ƒл€ указани€ стандартных устройств ввода, вывода информации и вывода сообщений об ошибках следует определить значени€ полей дескрипторов стандартных устройств (hStdInput, hStdOutput и hStdError) в структуре STARTUPINFO. „тобы эти значени€ не игнорировались, следует задать дл€ другого элемента этой же структуры, а именно, элемента dwFlags, значение STARTF_USESTDHANDLES и определить все дескрипторы, которые потребуютс€ дочернему процессу. ”бедитесь в том, что эти дескрипторы €вл€ютс€ наследуемыми и что при вызове функции CreateProcess значение параметра bInheritHandles установлено равным TRUE. Ѕолее подробна€ информаци€ по этому вопросу, сопровождаема€ соответствующим примером, приводитс€ в разделе "Ќаследуемые дескрипторы".

lpProInfо Ч указатель на структуру, в которую будут помещены возвращаемые функцией значени€ дескрипторов и глобальных идентификаторов процесса и потока. —труктура PROCESS_INFORMATION, о которой идет речь, имеет следующий вид:

typedef struct PROCESS_INFORMATION {

HANDLE hProcess;

HANDLE hThread;

DWORD dwProcessId;

DWORD dwThreadId;

} PROCESS_INFORMATION;

«ачем процессам и потокам нужны еще и дескрипторы, если они снабжаютс€ глобальными идентификаторами (ID)? √лобальные идентификаторы остаютс€ уникальными дл€ данного объекта на прот€жении всего времени его существовани€ и во всех процессах, тогда дескрипторов процесса может быть несколько и каждый из которых может характеризоватьс€ собственным набором атрибутов, например определенными разрешени€ми доступа. ¬ силу указанных причин одним функци€м управлени€ процессами требуетс€ предоставл€ть идентификаторы процессов, а другим Ч дескрипторы.  роме того, необходимость в дескрипторах процессов возникает при использовании универсальных функций, которые требуют указани€ дескрипторов. ¬ качестве примера можно привести функции ожидани€, обсуждаемые далее в этой главе, которые обеспечивают отслеживание переходов объектов различного типа, в том числе и процессов, указываемых с помощью дескрипторов, в определенные состо€ни€. “очно так же, как и дескрипторы файлов, дескрипторы процессов и потоков должны закрыватьс€ сразу же после того, как необходимость в них отпала.

ѕримечание

Ќовый процесс получает информацию об окружении, рабочем каталоге и иную информацию в результате вызова функции CreateProcess. ѕо завершении этого вызова любые изменени€ характеристик родительского процесса никак не отраз€тс€ на дочернем процессе. “ак, после вызова функции CreateProcess рабочий каталог родительского процесса может изменитьс€, но на дочерний процесс это не окажет никакого вли€ни€, если только он сам не сменит рабочий каталог. ќба процесса полностью независимы друг от друга.

ћодели процесса в UNIX и Windows значительно отличаютс€ друг от друга. ѕрежде всего, в Windows отсутствует эквивалент UNIX-функции fork, создающей копию родительского процесса, включа€ его пространство данных, кучу и стек. ¬ Windows трудно добитьс€ точной эмул€ции fork, но как ни расценивать последстви€ этого ограничени€, остаетс€ фактом, что проблемы с использованием функции fork существуют и в многопоточных системах UNIX, поскольку любые попытки создани€ точной реплики многопоточной системы с копи€ми всех потоков и объектов синхронизации, особенно в случае SMP-систем, привод€т к возникновению множества трудностей. ѕоэтому в действительности функци€ fork вообще плохо подходит дл€ многопоточных систем.

¬ то же врем€, функци€ CreateProcess аналогична обычной дл€ UNIX цепочке последовательных вызовов функций fork и execl (или одной из п€ти остальных функций exec). ¬ отличие от Windows пути доступа в UNIX определ€ютс€ исключительно переменной среды PATH.

 ак ранее уже отмечалось, отношени€ "предок-потомок" между процессами в Windows не поддерживаютс€. “ак, выполнение дочернего процесса будет продолжатьс€ даже после того, как завершитс€ родительский процесс.  роме того, в Windows отсутствуют группы процессов. —уществует, однако, ограниченна€ форма группы процессов, в которой все процессы получают управл€ющие событи€ консоли.

ѕроцессы Windows идентифицируютс€ как дескрипторами, так и идентификаторами процессов, тогда как в UNIX дескрипторы процессов отсутствуют.





ѕоделитьс€ с друзь€ми:


ƒата добавлени€: 2015-09-20; ћы поможем в написании ваших работ!; просмотров: 524 | Ќарушение авторских прав


ѕоиск на сайте:

Ћучшие изречени€:

—тудент всегда отча€нный романтик! ’оть может сдать на двойку романтизм. © Ёдуард ј. јсадов
==> читать все изречени€...

2229 - | 1988 -


© 2015-2024 lektsii.org -  онтакты - ѕоследнее добавление

√ен: 0.023 с.