#! /usr/local/bin/pike -w int main() { mapping(string:int) np = ([]); mapping(string:string) gecos = ([]); mapping(string:int) gids = ([]); mapping(int:string) gid2gname = ([]); string data = Process.popen( "/bin/ps -ef" ); foreach ( (data/"\n")[1..], string line ) { string name; sscanf( line, "%[^ ]", name ); if( name && sizeof(name) ) np[name]++; } data = 0; array(string) names = indices(np); sort( values(np), names ); names = reverse( names ); foreach ( names, string name ) { array pwrec = getpwnam(name); sscanf( pwrec[4], "%[^,]", gecos[name] ); gids[name] = pwrec[3]; } foreach ( values(gids), int gid ) gid2gname[gid] = getgrgid(gid)[0]; foreach ( names, string name ) { write( "%8s:%30s, %10s:%4d\n", name, gecos[name][..29], ( gid2gname[gids[name]]|| "" )[..9], np[name] ); } return 0; }