Documentos de Académico
Documentos de Profesional
Documentos de Cultura
T2 - Procesos
T2 - Procesos
Describir
!! Johnson
1.!
2.!
"! Captulo 7.
!! Microsoft:
3.!
4.!
5.!
!! Microsoft:
6.!
Introduccin
Repaso llamadas POSIX.1
Creacin de procesos
Terminacin de procesos
Esperar terminacin
Otras llamadas
"! Programacin en Windows -> Windows Base Services > Archivos DLL, procesos y subprocesos ->
Documentacin del SDK -> Processes and Threads.
!! Elementos
bsicos
!! Contenido
1.!
2.!
3.!
4.!
5.!
6.!
Introduccin
Repaso llamadas POSIX.1
Creacin de procesos
Terminacin de procesos
Esperar terminacin
Otras llamadas
"!
"!
"!
"!
"!
"!
"!
Uno o ms hilos
Espacio virtual de direcciones propio
Uno o ms segmentos de cdigo, incluyendo DLLs
Uno o ms segmentos de datos (variables globales)
Bloques de entorno, con informacin variable (ej: path)
La pila del proceso
Recursos: descriptores abiertos, otras pilas, etc.
POSIX
fork()
exec()
exit()
waitpid()
get()
set()
Win32 DescripcinDescripcin
Creacin de procesos, y
CreateProcess()
Creacin
de procesos
sustitucin del programa
Sustitucin del programa
Terminar el proceso
Terminar
el proceso
ExitProcess()
WaitForSingleObject()
Esperarprocesos
terminacinhijos
procesos hijos
Esperar
terminacin
GetCurrentProcessId()
Obtencin
atributos
Obtencin
atributos
(PID,
UID,(PID,
) )
Fijacin
atributosFijacin
(SID,atributos
PGID, )
1.!
2.!
3.!
4.!
5.!
6.!
Introduccin
Repaso llamadas POSIX.1
Creacin de procesos
Terminacin de procesos
Esperar terminacin
Otras llamadas
!!
!!
!!
#!
CreateProcess(
LPCTSTR lpszImageName,
LPTSTR lpszCommandLine,
LPSECURITY_ATTRIBUTES lpsaProcess,
LPSECURITY_ATTRIBUTES lpsaThread,
BOOL fInheritHandles,
DWORD fdwCreate,
LPVOID lpvEnvironment,
LPCTSTR lpszCurDir,
LPSTARTUPINFO lpsiStartInfo,
LPPROCESS_INFORMATION
lppiProcInfo);
Tema
2: Gestin de Procesos
BOOL
10
!! Parmetros:
!!
11
12
"!
1.!
2.!
3.!
4.!
5.!
#!
#!
#!
CreateProcess(
LPCTSTR lpszImageName,
LPTSTR lpszCommandLine,
LPSECURITY_ATTRIBUTES lpsaProcess,
LPSECURITY_ATTRIBUTES lpsaThread,
BOOL fInheritHandles,
DWORD fdwCreate,
LPVOID lpvEnvironment,
LPCTSTR lpszCurDir,
LPSTARTUPINFO lpsiStartInfo,
LPPROCESS_INFORMATION
lppiProcInfo);
Tema
2: Gestin de Procesos
BOOL
CreateProcess(
LPCTSTR lpszImageName,
LPTSTR lpszCommandLine,
LPSECURITY_ATTRIBUTES lpsaProcess,
LPSECURITY_ATTRIBUTES lpsaThread,
BOOL fInheritHandles,
DWORD fdwCreate,
LPVOID lpvEnvironment,
LPCTSTR lpszCurDir,
LPSTARTUPINFO lpsiStartInfo,
LPPROCESS_INFORMATION
lppiProcInfo);
Tema
2: Gestin de Procesos
BOOL
13
14
#!
#!
#!
#!
#!
CreateProcess(
LPCTSTR lpszImageName,
LPTSTR lpszCommandLine,
LPSECURITY_ATTRIBUTES lpsaProcess,
LPSECURITY_ATTRIBUTES lpsaThread,
BOOL fInheritHandles,
DWORD fdwCreate,
LPVOID lpvEnvironment,
LPCTSTR lpszCurDir,
LPSTARTUPINFO lpsiStartInfo,
LPPROCESS_INFORMATION
lppiProcInfo);
Tema
2: Gestin de Procesos
BOOL
CreateProcess(
LPCTSTR lpszImageName,
LPTSTR lpszCommandLine,
LPSECURITY_ATTRIBUTES lpsaProcess,
LPSECURITY_ATTRIBUTES lpsaThread,
BOOL fInheritHandles,
DWORD fdwCreate,
LPVOID lpvEnvironment,
LPCTSTR lpszCurDir,
LPSTARTUPINFO lpsiStartInfo,
LPPROCESS_INFORMATION
lppiProcInfo);
Tema
2: Gestin de Procesos
BOOL
15
16
!
!
!
!
CreateProcess(
LPCTSTR lpszImageName,
LPTSTR lpszCommandLine,
LPSECURITY_ATTRIBUTES lpsaProcess,
LPSECURITY_ATTRIBUTES lpsaThread,
BOOL fInheritHandles,
DWORD fdwCreate,
LPVOID lpvEnvironment,
LPCTSTR lpszCurDir,
LPSTARTUPINFO lpsiStartInfo,
LPPROCESS_INFORMATION
lppiProcInfo);
Tema
2: Gestin de Procesos
BOOL
17
#!
#!
#!
BOOL
CreateProcess(
LPCTSTR lpszImageName,
LPTSTR lpszCommandLine,
LPSECURITY_ATTRIBUTES lpsaProcess,
LPSECURITY_ATTRIBUTES lpsaThread,
BOOL fInheritHandles,
DWORD fdwCreate,
LPVOID lpvEnvironment,
LPCTSTR lpszCurDir,
LPSTARTUPINFO lpsiStartInfo,
LPPROCESS_INFORMATION
lppiProcInfo);
Tema 2: Gestin de Procesos
LPCTSTR lpszCurDir,
LPSTARTUPINFO lpsiStartInfo,
LPPROCESS_INFORMATION
lppiProcInfo);
Tema 2: Gestin de Procesos
!!
#!
#include <stdio.h>
#include <windows.h>
createprocess1.c
createprocess2.c
19
20
1.!
2.!
3.!
4.!
5.!
6.!
Introduccin
Repaso llamadas POSIX.1
Creacin de procesos
Terminacin de procesos
Esperar terminacin
Otras llamadas
ExitProcess(0);
!!
21
1.!
2.!
3.!
4.!
5.!
6.!
23
ExitProcess(1);
22
Introduccin
Repaso llamadas POSIX.1
Creacin de procesos
Terminacin de procesos
Esperar terminacin
Otras llamadas
24
!!
!!
POSIX: waitpid()
Win32: WaitForSingleObject + GetExitCodeProcesss
!! WaitForSingleObject:
esperar evento
DWORD WaitForSingleObject(
HANDLE hObject, //objeto a esperar
DWORD dwTimeOut); //tiempo mximo de espera
"! WaitForSingleObject()
Esperar a que un determinado objeto termine
#! Objeto: procesos, hilos
#!
!!
"! WaitForMultipleObjects()
#!
Esperar a ms de un proceso
"! GetExitCodeProcess()
#!
!! Valores
!!
25
!! WaitForMultipleObjects
de retorno:
DWORD WaitForMultipleObjects(
DWORD cObjects, //nmero objetos a esperar
LPHANDLE lphObjects, //vector con descriptores
BOOL fWaitAll, //esperar a todos?
DWORD dwTimeout); //tiempo mximo de espera
!!
!!
#!
!!
27
Valores de retorno:
"!
"!
"!
"!
Ejemplo de utilizacin:
WaitForSingleObject(pi.hProcess, INFINITE);
26
28
!! GetExitCodeProcess:
BOOL GetExitCodeProcess(
HANDLE hProcess, //descriptor proceso
LPDWORD lpdwExitCode); //valor de terminacin
!!
!!
!!
#include <stdio.h>
#include <windows.h>
Si falla, retorna 0.
lpdwExitCode: valor de terminacin
"! Si lpdwExitCode== STILL_ACTIVE, proceso todava no ha terminado
!!
29
!!
if (!retval) {
fprintf(stderr, "Fallo en CreateProcess\n");
ExitProcess(1);
}
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
ExitProcess(0);
Notas:
GetStartupInfo(&si);
30
t2ejemplo2.c
wait.c
!!
31
retval = CreateProcess(NULL,
"tree.com c:\\windows\\temp",
NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);
32
1.!
if (!retval) {
fprintf(stderr, "Fallo en CreateProcess()\n");
ExitProcess(1);
}
WaitForSingleObject(pi.hProcess, INFINITE);
if (GetExitCodeProcess(pi.hProcess, &dwValor))
printf("Valor de terminacin: %d.\n", dwValor);
else
fprintf(stderr, "Error en GetExitCodeProcess().\n");
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
ExitProcess(0);
2.!
3.!
4.!
5.!
6.!
!! Otras
33
!! GetCurrentProcess:
obtener pseudodescriptor
HANDLE GetCurrentProcess(VOID);
34
!!
#!
Introduccin
Repaso llamadas POSIX.1
Creacin de procesos
Terminacin de procesos
Esperar terminacin
Otras llamadas
!!
!!
Ejemplo:
"! GetCurrentProcess();
"! DuplicateHandle(GetCurrentProcess(), ProcInfo.hProcess,
GetCurrentProcess(), &hProc, PROCESS_QUERY_INFORMATION
| SYNCHRONIZE , FALSE, 0);
35
36
!! GetCurrentProcessId:
obtener identificador
!! OpenProcess:
HANDLE OpenProcess(
DWORD fdwAccess, //tipo de acceso
BOOL fInherit, //heredable??
DWORD dwProcessId ); //PID proceso
DWORD GetCurrentProcessId(VOID);
!!
!!
!!
!!
37
#!
#!
#!
#!
#!
#!
#!
#!
#!
38
DWORD GetProcessTimes(
HANDLE hProcess,
// Proceso a interrogar
LPFILETIME lpCreationTime, // Instante de creacin
LPFILETIME lpExitTime,
// Instante de terminacin
LPFILETIME lpKernelTime,
// Tiempo en ncleo
LPFILETIME lpUserTime);
// Tiempo en esp. usuario
Retorna: TRUE en caso de xito, FALSE en caso contrario.
!!
!!
!!
#!
Ejemplo:
Parmetros OpenProcess
#!
"!
"!
39
40
41