annotate PCbuild/kill_python.c @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents 1085b0e475d8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47705
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
1 /*
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
2 * Helper program for killing lingering python[_d].exe processes before
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
3 * building, thus attempting to avoid build failures due to files being
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
4 * locked.
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
5 */
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
6
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
7 #include <windows.h>
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
8 #include <wchar.h>
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
9 #include <tlhelp32.h>
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
10 #include <stdio.h>
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
11
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
12 #pragma comment(lib, "psapi")
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
13
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
14 #ifdef _DEBUG
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
15 #define PYTHON_EXE (L"python_d.exe")
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
16 #define PYTHON_EXE_LEN (12)
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
17 #define KILL_PYTHON_EXE (L"kill_python_d.exe")
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
18 #define KILL_PYTHON_EXE_LEN (17)
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
19 #else
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
20 #define PYTHON_EXE (L"python.exe")
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
21 #define PYTHON_EXE_LEN (10)
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
22 #define KILL_PYTHON_EXE (L"kill_python.exe")
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
23 #define KILL_PYTHON_EXE_LEN (15)
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
24 #endif
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
25
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
26 int
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
27 main(int argc, char **argv)
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
28 {
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
29 HANDLE hp, hsp, hsm; /* process, snapshot processes, snapshot modules */
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
30 DWORD dac, our_pid;
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
31 size_t len;
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
32 wchar_t path[MAX_PATH+1];
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
33
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
34 MODULEENTRY32W me;
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
35 PROCESSENTRY32W pe;
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
36
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
37 me.dwSize = sizeof(MODULEENTRY32W);
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
38 pe.dwSize = sizeof(PROCESSENTRY32W);
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
39
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
40 memset(path, 0, MAX_PATH+1);
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
41
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
42 our_pid = GetCurrentProcessId();
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
43
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
44 hsm = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, our_pid);
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
45 if (hsm == INVALID_HANDLE_VALUE) {
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
46 printf("CreateToolhelp32Snapshot[1] failed: %d\n", GetLastError());
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
47 return 1;
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
48 }
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
49
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
50 if (!Module32FirstW(hsm, &me)) {
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
51 printf("Module32FirstW[1] failed: %d\n", GetLastError());
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
52 CloseHandle(hsm);
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
53 return 1;
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
54 }
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
55
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
56 /*
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
57 * Enumerate over the modules for the current process in order to find
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
58 * kill_process[_d].exe, then take a note of the directory it lives in.
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
59 */
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
60 do {
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
61 if (_wcsnicmp(me.szModule, KILL_PYTHON_EXE, KILL_PYTHON_EXE_LEN))
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
62 continue;
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
63
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
64 len = wcsnlen_s(me.szExePath, MAX_PATH) - KILL_PYTHON_EXE_LEN;
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
65 wcsncpy_s(path, MAX_PATH+1, me.szExePath, len);
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
66
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
67 break;
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
68
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
69 } while (Module32NextW(hsm, &me));
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
70
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
71 CloseHandle(hsm);
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
72
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
73 if (path == NULL) {
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
74 printf("failed to discern directory of running process\n");
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
75 return 1;
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
76 }
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
77
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
78 /*
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
79 * Take a snapshot of system processes. Enumerate over the snapshot,
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
80 * looking for python processes. When we find one, verify it lives
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
81 * in the same directory we live in. If it does, kill it. If we're
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
82 * unable to kill it, treat this as a fatal error and return 1.
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
83 *
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
84 * The rationale behind this is that we're called at the start of the
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
85 * build process on the basis that we'll take care of killing any
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
86 * running instances, such that the build won't encounter permission
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
87 * denied errors during linking. If we can't kill one of the processes,
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
88 * we can't provide this assurance, and the build shouldn't start.
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
89 */
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
90
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
91 hsp = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
92 if (hsp == INVALID_HANDLE_VALUE) {
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
93 printf("CreateToolhelp32Snapshot[2] failed: %d\n", GetLastError());
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
94 return 1;
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
95 }
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
96
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
97 if (!Process32FirstW(hsp, &pe)) {
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
98 printf("Process32FirstW failed: %d\n", GetLastError());
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
99 CloseHandle(hsp);
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
100 return 1;
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
101 }
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
102
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
103 dac = PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_TERMINATE;
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
104 do {
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
105
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
106 /*
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
107 * XXX TODO: if we really wanted to be fancy, we could check the
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
108 * modules for all processes (not just the python[_d].exe ones)
79240
1085b0e475d8 Bump version to 3.4.0 alpha 0.
Georg Brandl <georg@python.org>
parents: 68071
diff changeset
109 * and see if any of our DLLs are loaded (i.e. python34[_d].dll),
47705
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
110 * as that would also inhibit our ability to rebuild the solution.
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
111 * Not worth loosing sleep over though; for now, a simple check
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
112 * for just the python executable should be sufficient.
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
113 */
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
114
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
115 if (_wcsnicmp(pe.szExeFile, PYTHON_EXE, PYTHON_EXE_LEN))
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
116 /* This isn't a python process. */
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
117 continue;
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
118
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
119 /* It's a python process, so figure out which directory it's in... */
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
120 hsm = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pe.th32ProcessID);
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
121 if (hsm == INVALID_HANDLE_VALUE)
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
122 /*
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
123 * If our module snapshot fails (which will happen if we don't own
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
124 * the process), just ignore it and continue. (It seems different
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
125 * versions of Windows return different values for GetLastError()
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
126 * in this situation; it's easier to just ignore it and move on vs.
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
127 * stopping the build for what could be a false positive.)
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
128 */
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
129 continue;
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
130
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
131 if (!Module32FirstW(hsm, &me)) {
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
132 printf("Module32FirstW[2] failed: %d\n", GetLastError());
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
133 CloseHandle(hsp);
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
134 CloseHandle(hsm);
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
135 return 1;
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
136 }
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
137
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
138 do {
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
139 if (_wcsnicmp(me.szModule, PYTHON_EXE, PYTHON_EXE_LEN))
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
140 /* Wrong module, we're looking for python[_d].exe... */
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
141 continue;
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
142
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
143 if (_wcsnicmp(path, me.szExePath, len))
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
144 /* Process doesn't live in our directory. */
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
145 break;
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
146
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
147 /* Python process residing in the right directory, kill it! */
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
148 hp = OpenProcess(dac, FALSE, pe.th32ProcessID);
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
149 if (!hp) {
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
150 printf("OpenProcess failed: %d\n", GetLastError());
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
151 CloseHandle(hsp);
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
152 CloseHandle(hsm);
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
153 return 1;
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
154 }
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
155
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
156 if (!TerminateProcess(hp, 1)) {
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
157 printf("TerminateProcess failed: %d\n", GetLastError());
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
158 CloseHandle(hsp);
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
159 CloseHandle(hsm);
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
160 CloseHandle(hp);
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
161 return 1;
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
162 }
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
163
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
164 CloseHandle(hp);
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
165 break;
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
166
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
167 } while (Module32NextW(hsm, &me));
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
168
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
169 CloseHandle(hsm);
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
170
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
171 } while (Process32NextW(hsp, &pe));
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
172
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
173 CloseHandle(hsp);
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
174
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
175 return 0;
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
176 }
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
177
f2e2d5b964de Ran svneol.py
Martin v. Löwis <martin@v.loewis.de>
parents: 46279
diff changeset
178 /* vi: set ts=8 sw=4 sts=4 expandtab */