| 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. | |
| Compiling: | |
| Whatever you do, don't trust the Makefiles. They are severely broken. | |
| You can touch top.h and top won't be recompiled, or you can change | |
| library files and discover that the library and programs won't be | |
| recompiled. | |
| 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. |