Добавил:
PaniKati
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:лабораторные / лаб6 / новая папка / Lab6
.c#include <windows.h>
#include <stdio.h>
int main()
{int k;
char buffer[7]="Smith";
DWORD actlen,rc;
BOOL assign;
STARTUPINFO si1, si2;
PROCESS_INFORMATION pi1, pi2;
HANDLE hstdin, jbobj;
hstdin = GetStdHandle(STD_INPUT_HANDLE);
printf("Perant is %s:\n",buffer);
memset(&si1, 0, sizeof(STARTUPINFO)); si1.cb=sizeof(si1);
memset(&si2, 0, sizeof(STARTUPINFO)); si2.cb=sizeof(si2);
rc=CreateProcess(NULL, "child1.exe Dorki Smith", NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si1, &pi1); //создать процесс, открыть экзешник в своем окне
if (!rc)
{
printf("Error create Process, codeError = %ld\n", GetLastError());
getchar();
}
rc=CreateProcess(NULL, "child2.exe Torki Smith", NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si2, &pi2); // аналогично создаем второго детенка
if (!rc)
{
printf("Error create Process, codeError = %ld\n", GetLastError());
getchar();
}
jbobj = CreateJobObject(NULL, NULL); //рабочая ветка, нужна чтоб объединить весь процесс под одной эгидой
assign = AssignProcessToJobObject(jbobj, pi2.hProcess); //второй процесс запихиваем, заставляем работать в команде
printf("For Child Process:\n");
printf("hProcess=%d hThread=%d ProcessId=%ld ThreadId=%ld\n",pi1.hProcess, pi1.hThread, pi1.dwProcessId, pi1.dwThreadId); //выводим на экран ид процессов и их ветки
printf("hProcess=%d hThread=%d ProcessId=%ld ThreadId=%ld\n",pi2.hProcess, pi2.hThread, pi2.dwProcessId, pi2.dwThreadId);
for (k=0; k<14; k++) //на 7 шаге должна уничтожиться первая дочь...
{ if (k==7)
{
TerminateProcess(pi1.hProcess, 0); //убить дочь, но не внука
printf("child1 dead!\n");
}
if (k==11){ //уничтожается jobj , убивает ребенка и внука по второй ветке
TerminateJobObject(jbobj, 0);
printf("child2 and gen dead!\n");
}
printf("I am Parent is %s (my K=%d)\n",buffer, k); Sleep(2500); // я отец, это шаг процесса
}
CloseHandle(pi1.hProcess); //закрываем хэндлы
CloseHandle(pi1.hThread);
CloseHandle(pi2.hProcess);
CloseHandle(pi2.hThread);
return 0;
}
Соседние файлы в папке новая папка