use strict;
use warnings;
use POSIX qw/getpgrp tcgetpgrp/;
if (!open(TTY, "/dev/tty")) {
print "no tty\n";
} else {
my $tpgrp = tcgetpgrp(fileno(*TTY));
my $pgrp = getpgrp();
if ($tpgrp == $pgrp) {
print "foreground\n";
} else {
print "background\n";
}
}
tcgetpgrp:
The tcgetpgrp() function will return the value of the pro-
cess group ID of the foreground process group associated
with the terminal.
If there is no foreground process group, tcgetpgrp() returns
a value greater than 1 that does not match the process group
ID of any existing process group.
The tcgetpgrp() function is allowed from a process that is a
member of a background process group; however, the informa-
tion may be subsequently changed by a process that is a
member of a foreground process group.
getpgrp():
The getpgrp() function returns the process group ID of the calling process.
Upon successful completion, these functions return the pro-
cess group ID. Otherwise, getpgid() returns (pid_t)-1 and
sets errno to indicate the error.
|