http://qs321.pair.com?node_id=750355

manoj_speed has asked for the wisdom of the Perl Monks concerning the following question:

Hi friend

Is there any way to programmatically determine if my current script is running in the background or foreground? My script is either run in the foreground or background, and I need to know the information.

Replies are listed 'Best First'.
Re: Determine running process
by andreas1234567 (Vicar) on Mar 13, 2009 at 09:44 UTC
Re: Determine running process
by leslie (Pilgrim) on Mar 13, 2009 at 12:57 UTC

    You can use this below code

    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.