summaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2017-08-27 12:39:03 +0200
committerDaniel Friesel <derf@finalrewind.org>2017-08-27 12:39:03 +0200
commit9e146eb61690404a33c80645fbb46b696d48d484 (patch)
tree6a35496dbcd0c8c334e55141a103e5eb8e0a7de4 /src/main.c
parent6e6d355fef849998a194278f0aafe5c9e6de5139 (diff)
Do not accept control from stdin when running in the background
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c12
1 files changed, 11 insertions, 1 deletions
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)