2 * CDE - Common Desktop Environment
4 * Copyright (c) 1993-2012, The Open Group. All rights reserved.
6 * These libraries and programs are free software; you can
7 * redistribute them and/or modify them under the terms of the GNU
8 * Lesser General Public License as published by the Free Software
9 * Foundation; either version 2 of the License, or (at your option)
12 * These libraries and programs are distributed in the hope that
13 * they will be useful, but WITHOUT ANY WARRANTY; without even the
14 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU Lesser General Public License for more
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with these libraries and programs; if not, write
20 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21 * Floor, Boston, MA 02110-1301 USA
23 /* $XConsortium: Process.C /main/3 1996/10/01 16:10:01 drk $ */
25 * (c) Copyright 1993, 1994 Hewlett-Packard Company *
26 * (c) Copyright 1993, 1994 International Business Machines Corp. *
27 * (c) Copyright 1993, 1994 Sun Microsystems, Inc. *
28 * (c) Copyright 1993, 1994 Novell, Inc. *
40 (void)Invoke("ps -e -F \"pid ppid uid command\"", &procs);
41 #elif defined(__FreeBSD__)
42 (void)Invoke("/bin/ps ax -o pid,ppid,uid,comm", &procs);
44 (void)Invoke("/bin/ps -el | awk '{printf(\"%s %s %s %s\\n\",$4,$5,$3,$NF)}'",
47 pprocs = (char **)malloc(sizeof(char *));
50 while(pprocs[NumProcs] = strtok(NULL, "\n"))
53 pprocs = (char **)realloc(pprocs, sizeof(char *) * (NumProcs + 1));
64 char *Process::GetByPid(pid_t _pid)
71 for (i = 0; i < NumProcs; i++)
73 long long_pid, long_ppid, long_uid;
74 sscanf(pprocs[i], "%ld %ld %ld", &long_pid, &long_ppid, &long_uid);
75 pid = (pid_t)long_pid;
76 ppid = (pid_t)long_ppid;
77 uid = (uid_t)long_uid;
82 last_proc = pprocs[i];
89 pid_t Process::Parent(pid_t pid)
91 char *proc = GetByPid(pid);
98 uid_t Process::UID(pid_t pid)
100 char *proc = GetByPid(pid);
107 char *Process::Command(pid_t _pid)
109 char *proc = GetByPid(_pid);
114 for (s = proc; *s == ' '; s++)
116 for ( ; *s != ' '; s++)
119 for ( ; *s == ' '; s++)
121 for ( ; *s != ' '; s++)
124 for ( ; *s == ' '; s++)
126 for ( ; *s != ' '; s++)
129 for ( ; *s == ' '; s++)