From 9e146eb61690404a33c80645fbb46b696d48d484 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Sun, 27 Aug 2017 12:39:03 +0200 Subject: Do not accept control from stdin when running in the background --- src/main.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/main.c b/src/main.c index 0f2844f..b3f121c 100644 --- a/src/main.c +++ b/src/main.c @@ -111,7 +111,17 @@ int feh_main_iteration(int block) fdsize = xfd + 1; pt = feh_get_time(); first = 0; - if (isatty(STDIN_FILENO) && !opt.multiwindow) { + /* + * Only accept commands from stdin if + * - stdin is a terminal (otherwise it's probably used as an image / filelist) + * - we aren't running in multiwindow mode (cause it's not clear which + * window commands should be applied to in that case) + * - we're in the same process group as stdin, AKA we're not running + * in the background. Background processes are stopped with SIGTTOU + * if they try to write to stdout or change terminal attributes. They + * also don't get input from stdin anyway. + */ + if (isatty(STDIN_FILENO) && !opt.multiwindow && getpgrp() == (tcgetpgrp(STDIN_FILENO))) { control_via_stdin = 1; struct termios ctrl; if (tcgetattr(STDIN_FILENO, &old_term_settings) == -1) -- cgit v1.2.3