diff --git a/lib/procinfo.cpp b/lib/procinfo.cpp
new file mode 100644
index 0000000000..9651b60fc3
--- /dev/null
+++ b/lib/procinfo.cpp
@@ -0,0 +1,87 @@
+// This file is part of BOINC.
+// http://boinc.berkeley.edu
+// Copyright (C) 2011 University of California
+//
+// BOINC is free software; you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation,
+// either version 3 of the License, or (at your option) any later version.
+//
+// BOINC is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with BOINC. If not, see .
+
+// platform-independent process-enumeration functions
+
+#ifndef _WIN32
+#include
+#include
+#include
+#endif
+
+#include "procinfo.h"
+
+using std::vector;
+
+static void get_descendants_aux(vector& piv, int pid, vector& pids) {
+ for (unsigned int i=0; i& pids) {
+ int retval;
+ vector piv;
+ retval = procinfo_setup(piv);
+ if (retval) return;
+ get_descendants_aux(piv, pid, pids);
+}
+
+
+#ifndef _WIN32
+
+// get resource usage of non-BOINC apps
+//
+void procinfo_other(PROCINFO& pi, vector& piv) {
+ unsigned int i;
+
+ memset(&pi, 0, sizeof(pi));
+ for (i=0; i& pids) {
+ int status;
+ for (unsigned int i=0; i= 0) {
+ return true;
+ }
+ }
+ return false;
+}
+
+void kill_all(vector& pids) {
+ for (unsigned int i=0; i