¿Cómo sabe un proceso cuándo ha sido puesto en segundo plano?
Pregunta
Cuando hago scp en un archivo, puedo detenerlo con ^ Z y ponerlo en segundo plano. Cuando está en segundo plano, deja de imprimir su progreso, pero la copia continúa. Si vuelvo a ponerlo en primer plano, se reanuda la impresión. Como lo sabe SIGTTOU? ¿Eso sucede en un ptty estándar?
Solución 2
Un compañero mío y yo, en realidad, revisamos la fuente y encontramos la respuesta.
Cuando scp está a punto de imprimir la salida, ejecuta tcgetpgrp en stdout. Esto devolverá el grupo de proceso de control del terminal (asumiendo que es un terminal). Solo se imprimirá si el grupo de proceso que controla el terminal es el mismo que el grupo de proceso de scp. Resulta que no se requiere señalización! (Aunque maneja SIGWINCH para calcular el tamaño de la línea de progreso).
Otros consejos
Sí, lo tienes. El proceso atraparía o ignoraría a SIGTTOU (y tal vez a SIGTTIN, dependiendo de lo que esté haciendo), y luego se comportaría de manera apropiada al recibir esas señales. Linux sí envía esas señales en pseudo-terminales normales.