1. Procese Windows; comunicaţii prin pipe şi IPC 2
1. Procese Windows; comunicaţii prin pipe şi IPC 2
1. Procese Windows; comunicaţii prin pipe şi IPC 2
- TAGS
- procese
- pipe
- www.cs.ubbcluj.ro
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Procese</strong> <strong>Windows</strong>; <strong>comunicaţii</strong> <strong>prin</strong> <strong>pipe</strong> <strong>şi</strong> <strong>IPC</strong> - 9 -<br />
Funcţia TerminateProcess are următorul prototip:<br />
BOOL TerminateProcess (HANDLE hProcess, UINT fuExitCode);<br />
Cu această funcţie, un process poate termina orice alt proces din sistem, inclusiv pe el însu<strong>şi</strong>.<br />
Procesul terminat este dat de referinţa hProcess. Codul de retur a procesului terminat va fi<br />
setată pe valoarea parametrului fuExitCode. Folosirea funcţiei TerminateProcess poate<br />
fi periculoasă la o programare neîngrijită. In mod normal, evenimentul de terminare a unui<br />
proces este semnalat de către <strong>Windows</strong> tuturor DLL-urilor ataşate de proces. La terminarea<br />
procesului, folosind funcţia TerminateProcess, aceste DLL-uri nu vor fi avertizate,<br />
producându-se eventuale pierderi de date. <strong>Windows</strong> garantează totu<strong>şi</strong> că toate resursele<br />
sistem utilizate de proces vor fi eliberate indiferent cum este terminat procesul.<br />
<strong>1.</strong>3.3. Exemple de utilizare de procese sub <strong>Windows</strong><br />
<strong>1.</strong>3.3.<strong>1.</strong> Exemplul 3: Rezumatul directorului curent<br />
Pentru utilizare sub <strong>Windows</strong>, vom folosi ca intermediar un fisier de comenzi ls.bat, care<br />
contine o singura linie:<br />
dir %1<br />
Sursa execWin.cpp a programului este:<br />
#include <br />
#include <br />
int main() {<br />
STARTUPINFO si = { sizeof(si) };<br />
PROCESS_INFORMATION pi;<br />
// ls.bat contine linia: dir %1<br />
<strong>prin</strong>tf("Procesul parinte %d va creea un fiu\n", GetCurrentProcessId());<br />
// Rulati alternativ cu una dintre urmatoarele doua linii comentata:<br />
BOOL b = CreateProcess("ls.bat", NULL, NULL, NULL,<br />
// BOOL b = CreateProcess("ls.bat", "ls.bat *.cpp", NULL, NULL,<br />
FALSE, 0, NULL, NULL, &si, &pi);<br />
WaitForSingleObject(pi.hProcess, INFINITE);<br />
<strong>prin</strong>tf("Terminat procesul fiu %d creeat de parintele %d\n",<br />
pi.dwProcessId, GetCurrentProcessId());<br />
return 0;<br />
}<br />
Efectul compilarii si a executiei este:<br />
D:\Florin\Didactic\20102011\SO\probleme\WProc-H>gcc execWin.cpp<br />
D:\Florin\Didactic\20102011\SO\probleme\WProc-H>a<br />
Procesul parinte 2320 va creea un fiu<br />
D:\Florin\Didactic\20102011\SO\probleme\WProc-H>dir<br />
Volume in drive D is fmbData<br />
Volume Serial Number is F6C0-1474<br />
Directory of D:\Florin\Didactic\20102011\SO\probleme\WProc-H