From 0fe393ff270922cd4f6edbcaabba006314e73a37 Mon Sep 17 00:00:00 2001 From: Jim Warner Date: Sat, 18 May 2013 00:00:00 -0500 Subject: [PATCH 1/2] top: inoculated against a window manager like 'screen' If top were invoked under the 'screen' window manager, writing the terminfo string 'exit_ca_mode' at top exit would not restore the display to the state existing at the time top was started. That's what occurs normally. The net result of that failure was a corrupted screen. However, there is a 'screen' configuration option that will produce proper 'rmcup' behavior, but it is off by default. That screencr option is known as 'altscreen'. I stumbled across this provision by cloning the screen git repository then searching for references to 'cup'. If 'altscreen on' had been in either the /etc/screenrc or the $HOME/.screenrc configuration file, my poor old top would never have been accused of such corruptions. Of course, the Programming Gods decree that any simple solution for our problem must always be revealed last. So before discovering that rc option, another approach was taken involving top only. With just a little extra refactoring of top display logic he was made immune to any such quirk in the implementation of 'smcup/rmcup'. I always feel good about any enhancement that actually reduces the total number of lines of code. Even though this change involved mostly rearranging some logic, it yielded one less line (can't judge by diffstat because of braces & notes). Anyway, rather than requiring some change to a screenrc file, now we are self-sufficient. Reference(s): procps --------------------------------------------- https://bugzilla.redhat.com/show_bug.cgi?id=962022 http://www.freelists.org/post/procps/top-procpsng337-no-screen-cleaning-at-exit,3 . top : disable tty scrollback buffer to improve SIGWINCH commit dedaf6e1a81738ff08ee8e8523871e12f555ad6d screen --------------------------------------------- git://git.sv.gnu.org/screen.git . Improve cursor store/restore on smcup/rmcup. commit f95352946080be803b794c9f2733d8c809c1a39a . Fix using alternate screen buffers in some cases. commit ad56f746c6243d45124485d198d577bdbb78071c http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=558724 Signed-off-by: Jim Warner --- NEWS | 2 ++ top/top.c | 18 ++++++++---------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/NEWS b/NEWS index 083343db..289cf160 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,8 @@ procps-ng-3.3.8 Debian #707648 * eliminate the potential library segmentation fault Debian #706259, RedHat #951391 + * top now accomodates a window manager like 'screen' + RedHat #962022 procps-ng-3.3.7 diff --git a/top/top.c b/top/top.c index 4caf6580..2b05a601 100644 --- a/top/top.c +++ b/top/top.c @@ -350,16 +350,14 @@ static void at_eoj (void) { if (Ttychanged) { tcsetattr(STDIN_FILENO, TCSAFLUSH, &Tty_original); if (keypad_local) putp(keypad_local); - if (exit_ca_mode) + putp("\n"); + if (exit_ca_mode) { // this next will also replace top's most recent screen with the // original display contents that were visible at our invocation putp(exit_ca_mode); - else { - // but if we can't, we'll simply do it as old top always used to - putp(tg2(0, Screen_rows)); - putp("\n"); } putp(Cap_curs_norm); + putp(Cap_clr_eol); #ifndef RMAN_IGNORED putp(Cap_smam); #endif @@ -756,7 +754,6 @@ static int show_pmt (const char *str) { * Show a special coordinate message, in support of scrolling */ static inline void show_scroll (void) { PUTT(Scroll_fmts, tg2(0, Msg_row), Frame_maxtask); - putp(tg2(0, Msg_row)); } // end: show_scroll @@ -5445,7 +5442,7 @@ static void frame_hlp (int wix, int max) { * (*subordinate* functions invoked know WHEN the user's had) * (ENOUGH already. And at Frame End, it SHOULD be apparent) * (WE am d'MAN -- clearing UNUSED screen LINES and ensuring) - * (the CURSOR is STUCK in just the RIGHT place, know what I) + * (that those auto-sized columns are addressed, know what I) * (mean? Huh, "doesn't DO MUCH"! Never, EVER think or say) * (THAT about THIS function again, Ok? Good that's better.) * @@ -5474,7 +5471,10 @@ static void frame_make (void) { Tree_idx = Pseudo_row = Msg_row = scrlins = 0; summary_show(); Max_lines = (Screen_rows - Msg_row) - 1; - OFFw(Curwin, INFINDS_xxx); + OFFw(w, INFINDS_xxx); + + if (VIZISw(w) && CHKw(w, View_SCROLL)) show_scroll(); + else PUTT("%s%s", tg2(0, Msg_row), Cap_clr_eol); if (!Rc.mode_altscr) { // only 1 window to show so, piece o' cake @@ -5498,8 +5498,6 @@ static void frame_make (void) { putp(Cap_nl_clreos); PSU_CLREOS(Pseudo_row); } - if (VIZISw(w) && CHKw(w, View_SCROLL)) show_scroll(); - else PUTT("%s%s", tg2(0, Msg_row), Cap_clr_eol); fflush(stdout); /* we'll deem any terminal not supporting tgoto as dumb and disable From 39c6de4c8788fae91e008cc686db1d1e65b8bbc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Pavl=C3=ADn?= Date: Fri, 10 May 2013 13:39:00 +0200 Subject: [PATCH 2/2] ps: remove sd_ prefix from systemd output options ps : This patch removes sd_ prefix from recently added systemd output options to let them look more tied with the system. Patch does not change behaviour of these options, only modifies their representation to user. --- ps/output.c | 22 ++++++++++++++++------ ps/ps.1 | 42 +++++++++++++++++++++--------------------- 2 files changed, 37 insertions(+), 27 deletions(-) diff --git a/ps/output.c b/ps/output.c index 6b5f19c0..0203d5c4 100644 --- a/ps/output.c +++ b/ps/output.c @@ -1533,6 +1533,9 @@ static const format_struct format_array[] = { {"login", "LOGNAME", pr_nop, sr_nop, 8, 0, BSD, AN|LEFT}, /*logname*/ /* double check */ {"logname", "LOGNAME", pr_nop, sr_nop, 8, 0, XXX, AN|LEFT}, /*login*/ {"longtname", "TTY", pr_tty8, sr_tty, 8, 0, DEC, PO|LEFT}, +#ifdef WITH_SYSTEMD +{"lsession", "SESSION", pr_sd_session, sr_nop, 11, 0, LNX, ET|LEFT}, +#endif {"lstart", "STARTED", pr_lstart, sr_nop, 24, 0, XXX, ET|RIGHT}, {"luid", "LUID", pr_nop, sr_nop, 5, 0, LNX, ET|RIGHT}, /* login ID */ {"luser", "LUSER", pr_nop, sr_nop, 8, USR, LNX, ET|USER}, /* login USER */ @@ -1545,6 +1548,9 @@ static const format_struct format_array[] = { {"m_size", "SIZE", pr_size, sr_size, 5, MEM, LNX, PO|RIGHT}, {"m_swap", "SWAP", pr_nop, sr_nop, 5, 0, LNx, PO|RIGHT}, {"m_trs", "TRS", pr_trs, sr_trs, 5, MEM, LNx, PO|RIGHT}, +#ifdef WITH_SYSTEMD +{"machine", "MACHINE", pr_sd_machine, sr_nop, 31, 0, LNX, ET|LEFT}, +#endif {"maj_flt", "MAJFL", pr_majflt, sr_maj_flt, 6, 0, LNX, AN|RIGHT}, {"majflt", "MAJFLT", pr_majflt, sr_maj_flt, 6, 0, XXX, AN|RIGHT}, {"min_flt", "MINFL", pr_minflt, sr_min_flt, 6, 0, LNX, AN|RIGHT}, @@ -1565,6 +1571,9 @@ static const format_struct format_array[] = { {"osz", "SZ", pr_nop, sr_nop, 2, 0, SUN, PO|RIGHT}, {"oublk", "OUBLK", pr_nop, sr_nop, 5, 0, BSD, AN|RIGHT}, /*oublock*/ {"oublock", "OUBLK", pr_nop, sr_nop, 5, 0, DEC, AN|RIGHT}, /*oublk*/ +#ifdef WITH_SYSTEMD +{"ouid", "OWNER", pr_sd_ouid, sr_nop, 5, 0, LNX, ET|LEFT}, +#endif {"p_ru", "P_RU", pr_nop, sr_nop, 6, 0, BSD, AN|RIGHT}, {"paddr", "PADDR", pr_nop, sr_nop, 6, 0, BSD, AN|RIGHT}, {"pagein", "PAGEIN", pr_majflt, sr_maj_flt, 6, 0, XXX, AN|RIGHT}, @@ -1606,12 +1615,7 @@ static const format_struct format_array[] = { {"scnt", "SCNT", pr_nop, sr_nop, 4, 0, DEC, AN|RIGHT}, /* man page misspelling of scount? */ {"scount", "SC", pr_nop, sr_nop, 4, 0, AIX, AN|RIGHT}, /* scnt==scount, DEC claims both */ #ifdef WITH_SYSTEMD -{"sd_machine","MACHINE", pr_sd_machine, sr_nop, 31, 0, LNX, ET|LEFT}, -{"sd_ouid", "OWNER", pr_sd_ouid, sr_nop, 5, 0, LNX, ET|LEFT}, -{"sd_seat", "SEAT", pr_sd_seat, sr_nop, 11, 0, LNX, ET|LEFT}, -{"sd_session","SESSION", pr_sd_session, sr_nop, 11, 0, LNX, ET|LEFT}, -{"sd_unit", "UNIT", pr_sd_unit, sr_nop, 31, 0, LNX, ET|LEFT}, -{"sd_uunit", "UUNIT", pr_sd_uunit, sr_nop, 31, 0, LNX, ET|LEFT}, +{"seat", "SEAT", pr_sd_seat, sr_nop, 11, 0, LNX, ET|LEFT}, #endif {"sess", "SESS", pr_sess, sr_session, 5, 0, XXX, PO|PIDMAX|RIGHT}, {"session", "SESS", pr_sess, sr_session, 5, 0, LNX, PO|PIDMAX|RIGHT}, @@ -1679,6 +1683,9 @@ static const format_struct format_array[] = { {"uid_hack", "UID", pr_euser, sr_euser, 8, USR, XXX, ET|USER}, {"umask", "UMASK", pr_nop, sr_nop, 5, 0, DEC, AN|RIGHT}, {"uname", "USER", pr_euser, sr_euser, 8, USR, DEC, ET|USER}, /* man page misspelling of user? */ +#ifdef WITH_SYSTEMD +{"unit", "UNIT", pr_sd_unit, sr_nop, 31, 0, LNX, ET|LEFT}, +#endif {"upr", "UPR", pr_nop, sr_nop, 3, 0, BSD, TO|RIGHT}, /*usrpri*/ {"uprocp", "UPROCP", pr_nop, sr_nop, 8, 0, BSD, AN|RIGHT}, {"user", "USER", pr_euser, sr_euser, 8, USR, U98, ET|USER}, /* BSD n forces this to UID */ @@ -1686,6 +1693,9 @@ static const format_struct format_array[] = { {"usrpri", "UPR", pr_nop, sr_nop, 3, 0, DEC, TO|RIGHT}, /*upr*/ {"util", "C", pr_c, sr_pcpu, 2, 0, SGI, ET|RIGHT}, // not sure about "C" {"utime", "UTIME", pr_nop, sr_utime, 6, 0, LNx, ET|RIGHT}, +#ifdef WITH_SYSTEMD +{"uunit", "UUNIT", pr_sd_uunit, sr_nop, 31, 0, LNX, ET|LEFT}, +#endif {"vm_data", "DATA", pr_nop, sr_vm_data, 5, 0, LNx, PO|RIGHT}, {"vm_exe", "EXE", pr_nop, sr_vm_exe, 5, 0, LNx, PO|RIGHT}, {"vm_lib", "LIB", pr_nop, sr_vm_lib, 5, 0, LNx, PO|RIGHT}, diff --git a/ps/ps.1 b/ps/ps.1 index af249c2c..6311b48b 100644 --- a/ps/ps.1 +++ b/ps/ps.1 @@ -1311,6 +1311,10 @@ time the command started. See also .BR bsdstart , \ start , \ start_time ", and" \ stime . T} +lsession SESSION T{ +displays login session identifier of a process. +T} + lwp LWP T{ light weight process (thread) ID of the dispatchable entity (alias .BR spid , \ tid ). @@ -1319,6 +1323,10 @@ See for additional information. T} +machine MACHINE T{ +displays machine name for processes assigned to VM or container. +T} + maj_flt MAJFLT T{ The number of major page faults that have occurred with this process. T} @@ -1353,6 +1361,10 @@ if you want the kernel function name). Running tasks will display a dash ('\-') in this column. T} +ouid OWNER T{ +displays the Unix user identifier of the owner of the session of a process. +T} + pcpu %CPU T{ see .BR %cpu . @@ -1489,30 +1501,10 @@ SCHED_FIFO, SCHED_RR, SCHED_BATCH, SCHED_ISO, and SCHED_IDLE are respectively displayed as 0, 1, 2, 3, 4, and 5. T} -sd_machine MACHINE T{ -displays machine name for processes assigned to VM or container. -T} - -sd_ouid OWNER T{ -displays the Unix user identifier of the owner of the session of a process. -T} - -sd_seat SEAT T{ +seat SEAT T{ displays login session identifier of a process. T} -sd_session SESSION T{ -displays login session identifier of a process. -T} - -sd_unit UNIT T{ -displays systemd unit which a process belongs to. -T} - -sd_uunit UUNIT T{ -displays systemd user unit which a process belongs to. -T} - sess SESS T{ session ID or, equivalently, the process ID of the session leader. (alias .BR session , \ sid ). @@ -1732,6 +1724,10 @@ see .BR euser , \ user ). T} +unit UNIT T{ +displays systemd unit which a process belongs to. +T} + user USER T{ see .BR euser . @@ -1739,6 +1735,10 @@ see .BR euser , \ uname ). T} +uunit UUNIT T{ +displays systemd user unit which a process belongs to. +T} + vsize VSZ T{ see .BR vsz .