diff options
Diffstat (limited to 'winsup/utils/ps.cc')
-rw-r--r-- | winsup/utils/ps.cc | 149 |
1 files changed, 0 insertions, 149 deletions
diff --git a/winsup/utils/ps.cc b/winsup/utils/ps.cc deleted file mode 100644 index cca56ac..0000000 --- a/winsup/utils/ps.cc +++ /dev/null @@ -1,149 +0,0 @@ -/* ps.cc - - Copyright 1996, 1997, 1998 Cygnus Solutions. - -This file is part of Cygwin. - -This software is a copyrighted work licensed under the terms of the -Cygwin license. Please consult the file "CYGWIN_LICENSE" for -details. */ - -#include <stdio.h> -#include <windows.h> -#include <time.h> -#include <getopt.h> -#include <unistd.h> -#include <stdlib.h> -#include <pwd.h> -#include <sys/cygwin.h> - -static char * -start_time (external_pinfo *child) -{ - time_t st = child->start_time; - time_t t = time (NULL); - static char stime[40] = {'\0'}; - char now[40]; - - strncpy (stime, ctime (&st) + 4, 15); - strcpy (now, ctime (&t) + 4); - - if ((t - st) < (24 * 3600)) - return (stime + 7); - - stime[6] = '\0'; - - return stime; -} - -int -main (int argc, char *argv[]) -{ - external_pinfo *p; - int aflag, lflag, fflag, uid; - const char *dtitle = " PID TTY STIME COMMAND\n"; - const char *dfmt = "%5d%4d%10s %s\n"; - const char *ftitle = " UID PID PPID TTY STIME COMMAND\n"; - const char *ffmt = "%8.8s%6d%6d%4d%10s %s\n"; - const char *ltitle = " PID PPID PGID WINPID UID TTY STIME COMMAND\n"; - const char *lfmt = "%c %5d %5d %5d %8u %4d %3d %8s %s\n"; - char ch; - - aflag = lflag = fflag = 0; - uid = getuid (); - - while ((ch = getopt (argc, argv, "aelfu:")) != -1) - switch (ch) - { - case 'a': - case 'e': - aflag = 1; - break; - case 'f': - fflag = 1; - break; - case 'l': - lflag = 1; - break; - case 'u': - uid = atoi (optarg); - if (uid == 0) - { - struct passwd *pw; - - if ((pw = getpwnam (optarg))) - uid = pw->pw_uid; - else - { - fprintf (stderr, "user %s unknown\n", optarg); - exit (1); - } - } - break; - default: - fprintf (stderr, "Usage %s [-aefl] [-u uid]\n", argv[0]); - fprintf (stderr, "-f = show process uids, ppids\n"); - fprintf (stderr, "-l = show process uids, ppids, pgids, winpids\n"); - fprintf (stderr, "-u uid = list processes owned by uid\n"); - fprintf (stderr, "-a, -e = show processes of all users\n"); - exit (1); - } - - if (lflag) - printf (ltitle); - else if (fflag) - printf (ftitle); - else - printf (dtitle); - - (void) cygwin_internal (CW_LOCK_PINFO, 1000); - - for (int pid = 0; - (p = (external_pinfo *) cygwin_internal (CW_GETPINFO, - pid | CW_NEXTPID)); - pid = p->pid) - { - if (p->process_state == PID_NOT_IN_USE) - continue; - if (!aflag && p->uid != uid) - continue; - char status = ' '; - if (p->process_state & PID_STOPPED) - status = 'S'; - else if (p->process_state & PID_TTYIN) - status = 'I'; - else if (p->process_state & PID_TTYOU) - status = 'O'; - - char pname[MAX_PATH]; - if (p->process_state & PID_ZOMBIE) - strcpy (pname, "<defunct>"); - else - cygwin_conv_to_posix_path (p->progname, pname); - - char uname[128]; - - if (fflag) - { - struct passwd *pw; - - if ((pw = getpwuid (p->uid))) - strcpy (uname, pw->pw_name); - else - sprintf (uname, "%d", p->uid); - } - - if (lflag) - printf (lfmt, status, p->pid, p->ppid, p->pgid, - p->dwProcessId, p->uid, p->ctty, start_time (p), pname); - else if (fflag) - printf (ffmt, uname, p->pid, p->ppid, p->ctty, start_time (p), pname); - else - printf (dfmt, p->pid, p->ctty, start_time (p), pname); - - } - (void) cygwin_internal (CW_UNLOCK_PINFO); - - return 0; -} - |