Справочная страница из 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