/* * Program demonstrira stvaranje novih procesa i čekanje na njihov završetak na * Win32 platformi * * Zbog raznih ograničenja ovo rješenje nije isto kao i na labosima (npr. nema * ekvivalenta funkijama fork() i kill()) * * Prevođenje iz MS VS: dovoljno je upisati "cl 02_procesi.c" iz komandne linije u * kojoj su podešene sve varijable ("Visual Studio 2005 Command Prompt"). */ #include #include #include #include int main(int argc, char *argv[]) { STARTUPINFO si; PROCESS_INFORMATION pi[10]; int i, brPr, N; char szCmdline[30], child[]="02_child.exe"; if (argc != 3) { printf("Koristenje: %s BrProc Trajanje\n", argv[0]); return 1; } brPr = atoi (argv[1]); N = atoi (argv[2]); if( brPr<1 || brPr>10 || N < 5 || N > 100 ) { printf("Parametri izvan granica!\n%s", "( 0 < BrProc < 11, 5 < Trajanje < 100 )\n"); return 1; } sprintf(szCmdline, "%s %d", child, N); GetStartupInfo(&si); for (i = 0; i < brPr; i++){ printf("[R] Stvaram novi proces (%d.)\n", i+1); // Start the child process. if( !CreateProcess( NULL, // No module name (use command line) szCmdline, // Command line NULL, // Process handle not inheritable NULL, // Thread handle not inheritable FALSE, // Set handle inheritance to FALSE 0, // No creation flags NULL, // Use parent's environment block NULL, // Use parent's starting directory &si, // Pointer to STARTUPINFO structure &pi[i] ) // Pointer to PROCESS_INFORMATION structure ) { printf( "CreateProcess failed (%d).\n", GetLastError() ); return 1; } } printf("[R] Cekam na zavrsetak svih procesa\n"); for (i = 0; i < brPr; i++){ WaitForSingleObject( pi[i].hProcess, INFINITE ); printf("[R] Docekao jedan proces\n"); } printf("[R] Pocetni proces zavrsava\n"); }