Из программы на C, как узнать, запущен ли процесс на переднем или заднем плане? - PullRequest
0 голосов
/ 31 мая 2018

В моей программе на C я хочу иметь другое поведение независимо от того, выполняется ли мой процесс (POSIX) в фоновом режиме или на переднем плане. У меня нет доступа к argc / argv .

Я думал о чем-то вроде:

if (isatty(0)) {
  printf("Foreground\n");
} else {
  printf("Background\n");
}

Но это не работает длямне.Я получаю следующий результат:

$ ./myprog &
Foreground

1 Ответ

0 голосов
/ 31 мая 2018

Справочная страница из isatty() четко указывает на то, что функция test whether a file descriptor refers to a terminal.Когда вы передаете '0' в качестве аргумента, он в основном ссылается на STDIN, поэтому isatty () всегда будет возвращать TRUE, что означает, что ваш код ведет себя как

if (TRUE) {
  printf("Foreground\n");
} else {
  printf("Background\n");
}

Как указано в комментариях, правильный путь кпроверить передний план против фонового процесса, как этот код

#include <unistd.h>
#include <stdio.h>

int main()
{
pid_t console_pid = tcgetpgrp(STDOUT_FILENO);
pid_t my_pid = getpgrp();
if(console_pid == my_pid)
   printf("process foregrounded\n");
else
   printf("process backgrounded\n");
return 0;
}

Вот вывод на моем компьютере с Ubuntu

ubuntu@4w28n62:~$ ./a.out
process foregrounded
ubuntu@4w28n62:~$ ./a.out &
[1] 4814
ubuntu@4w28n62:~$ process backgrounded

[1]+  Done                    ./a.out
...