Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
42
Добавлен:
06.02.2018
Размер:
2.42 Кб
Скачать
#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;
}
Соседние файлы в папке новая папка