This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: display ps command line parameters


Dave Korn wrote:
On 30 April 2007 19:23, Matthew Woehlke wrote:

Dave Korn wrote:
On 30 April 2007 18:48, Matthew Woehlke wrote:

um... and since Cygwin has this information, doesn't this mean that 'ps'
is missing a feature that is standard to pretty much every other *nix
implementation of 'ps'? (I don't have a POSIX standard handy
  Yes you do:  open browser, google "posix opengroup".  Vol.2, "Shell and
utilities", part 4: Utilities: takes us to
...and am too lazy to look. :-) Anyway, since the information is
available, and most other *nix's 'ps' provides it, any reason Cygwin's
'ps' shouldn't do the same?

I believe you can probably guess the answer to this one... particularly if I tell you it starts with "P" and ends with "TC" :)

Ok... Here is a P for you to TD* (* D="Decline") :-)


--
Matthew
If you believe you received this e-mail in error, you are probably sadly mistaken, but if not, aren't you lucky?
--- ps.cc.orig	2007-04-30 17:33:46.245634000 -0500
+++ ps.cc	2007-04-30 17:57:22.907472200 -0500
@@ -18,6 +18,7 @@
 #include <sys/cygwin.h>
 #include <tlhelp32.h>
 #include <psapi.h>
+#include <sys/stat.h>

 static const char version[] = "$Revision: 1.11 $";
 static char *prog_name;
@@ -253,7 +254,7 @@
   const char *ftitle = "     UID     PID    PPID TTY     STIME COMMAND\n";
   const char *ffmt   = "%8.8s%8d%8d%4s%10s %s\n";
   const char *ltitle = "      PID    PPID    PGID     WINPID  TTY  UID    STIME COMMAND\n";
-  const char *lfmt   = "%c %7d %7d %7d %10u %4s %4u %8s %s\n";
+  const char *lfmt   = "%c %7d %7d %7d %10u %4s %4u %8s %s";
   char ch;

   aflag = lflag = fflag = sflag = 0;
@@ -405,11 +406,27 @@
 	printf (ffmt, uname, p->pid, p->ppid, ttynam (p->ctty), start_time (p),
 		pname);
       else if (lflag)
-	printf (lfmt, status, p->pid, p->ppid, p->pgid,
-		p->dwProcessId, ttynam (p->ctty),
-		p->version >= EXTERNAL_PINFO_VERSION_32_BIT ? p->uid32 : p->uid,
-		start_time (p), pname);
-
+	{
+	  printf (lfmt, status, p->pid, p->ppid, p->pgid,
+		  p->dwProcessId, ttynam (p->ctty),
+		  p->version >= EXTERNAL_PINFO_VERSION_32_BIT ? p->uid32 : p->uid,
+		  start_time (p), pname);
+	  if (p->ppid)
+	    {
+	      char procpath[MAX_PATH];
+	      FILE *f;
+	      snprintf(procpath, MAX_PATH, "/proc/%u/cmdline", p->pid);
+	      f = fopen(procpath, "rb");
+	      if (f)
+		{
+		  int c = 1;
+		  while (c != 0 && c != EOF) c = fgetc(f);
+		  for (;c != EOF; c = fgetc(f)) printf("%c", c?c:' ');
+		  fclose(f);
+		}
+	    }
+	  printf("\n");
+	}
     }
   (void) cygwin_internal (CW_UNLOCK_PINFO);


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]