47 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
Warning:
 | 
						|
 | 
						|
This code must corrctly handle lots of picky little details to meet
 | 
						|
the Unix98 standard while simultaneously being as compatible as
 | 
						|
possible with the original Linux ps. Don't "fix" something without
 | 
						|
considering the impact on all the special-case code. For example,
 | 
						|
the "tty" format _must_ use "TT" as the header, even though the SysV
 | 
						|
output formats _must_ use "TTY".
 | 
						|
 | 
						|
File overview:
 | 
						|
 | 
						|
display.c     main(), debug code, iterates over processes
 | 
						|
escape.c      Does stuff like \202 and < to command and environment.
 | 
						|
global.c      Data + code to init it.
 | 
						|
help.c        Help message.
 | 
						|
output.c      Giant tables and lots of output functions.
 | 
						|
parser.c      Initial command parsing.
 | 
						|
select.c      want_this_proc() checks a process against flags & lists
 | 
						|
sortformat.c  Parses sort & format specifier lists. Picks output format.
 | 
						|
stacktrace.c  Debug code, not normally used.
 | 
						|
../proc/*     Library used to gather data.
 | 
						|
regression    Regression tests that ought to be run.
 | 
						|
common.h      Lots of interesting stuff.
 | 
						|
Makefile      Makefile
 | 
						|
p             Script used to test ps when the library is not installed.
 | 
						|
utf           Empty file used to test "ps ut?" unmangling behavior.
 | 
						|
ps.1          Man page.
 | 
						|
 | 
						|
Operation:
 | 
						|
 | 
						|
Unless the personality forces BSD parsing, parser.c tries to parse the
 | 
						|
command line as a mixed BSD+SysV+Gnu mess. On failure, BSD parsing is
 | 
						|
attempted. If BSD parsing fails _after_ SysV parsing has been attempted,
 | 
						|
the error message comes from the original SysV parse.
 | 
						|
 | 
						|
Control goes to sortformat.c, which must pick apart ambiguous options
 | 
						|
like "O". Failure can reset the whole program and set PER_FORCE_BSD,
 | 
						|
which means a second trip through parser.c and sortformat.c.
 | 
						|
 | 
						|
The choice of output format happens in sortformat.c. There is a switch()
 | 
						|
with all the valid format_flags combinations. The SysV and default
 | 
						|
options are NULL (unless overridden by personality), which causes a
 | 
						|
trip through SysV output format generation hackery. Note that the
 | 
						|
default format always goes through there, even if it is for BSD.
 | 
						|
Formats that came from the switch() (generally BSD, plus overrides)
 | 
						|
get mangled a bit to support various SysV output modifiers.
 |