Вы можете попробовать что-то вроде этого:
use Proc::ProcessTable;
my $running_under_sge = 0;
my $ppid = getppid();
my $t = new Proc::ProcessTable;
foreach my $p (@{$t->table}) {
if ($p->pid == $ppid) {
if ($p->cmdline =~ m/sge_shepherd/) {
$running_under_sge++;
last;
}
}
}
Это работает, проверяя родительский процесс вашей программы.Если родительским процессом является sge_shepherd, то он был запущен демоном SGE exec.В зависимости от того, какую версию Grid Engine вы используете, имя может отличаться.