No sé por qué, así que me gustaría preguntarle a Gen...
$top -b
y luego Ctrl + Z para detenerlo, y luego presione
fg %1(jobID)
no funciona como se desea. La pantalla parece estar rota y, sobre todo, no acepta entradas como Ctrl + C. Si sabe por qué, hágamelo saber...
(Primer comentario)
Parece que es un pequeño error en top .
Ver código fuente top.c :
645 /* 646 * Catches: 647 * SIGTSTP, SIGTTIN and SIGTTOU */ 648 static void sig_paused (int dont_care_sig) { 661 fflush(stdout); 662 raise(SIGSTOP); 663 // later, after SIGCONT... 664 if (-1 == tcsetattr(STDIN_FILENO, TCSAFLUSH, &Tty_raw)) 665 error_exit(fmtmk(N_fmt(FAIL_tty_set_fmt), strerror(errno))); 666 #ifndef RMAN_IGNORED 667 putp(Cap_rmam); 668 #endif 669 if (keypad_xmit) putp(keypad_xmit); 670 putp(Cursor_state); 671 Frames_signal = BREAK_sig; 672 (void)dont_care_sig; 673 } // end: sig_paused ... 3798 // lastly, establish a robust signals environment 3799 memset(&sa, 0, sizeof(sa)); 3800 sigemptyset(&sa.sa_mask); 3801 //with user position preserved through SIGWINCH,we must avoid SA_RESTART 3802 sa.sa_flags = 0; 3803 for (i = SIGRTMAX; i; i--) { 3804 switch (i) { .... 3810 case SIGTSTP: case SIGTTIN: case SIGTTOU: 3811 sa.sa_handler = sig_paused; 3812 break; .... 3823 } 3824 sigaction(i, &sa, NULL); 3825 }Esto es lo que pasa:
top registra explícitamente su controlador SIGTSTP sig_paused() .top -b .top recibe SIGTSTP, en sig_paused() se detiene enviando SIGSTOP (línea 662).fg envía SIGCONT al top y lo activa.top , pone el tty en modo sin procesar (no debería hacer esto cuando se especifica -b ) .