Perlスクリプトから、SGEを介して実行されているのか、コマンドラインからローカルに実行されているのかを判断するにはどうすればよいですか?
3 に答える
4
http://www.cbi.utsa.edu/sge_tutorialから:
When a Sun Grid Engine job is run, a number of variables are preset into the
job’s script environment, as listed below.
SGE_ROOT - The Sun Grid Engine root directory as set for sge_execd before
start-up or the default /usr/SGE
SGE_CELL - The Sun Grid Engine cell in which the job executes
SGE_JOB_SPOOL_DIR - The directory used by sge_shepherd(8) to store jobrelated
data during job execution
...
...
%ENVをチェックすると、SGEを介して実行されているかどうかがわかります。
于 2011-03-14T15:50:31.467 に答える
0
jlpが提供するスクリプトは徹底的なチェック方法であり、私が推奨する方法です。ただし、簡単なステートメントを実行して、環境にSGEジョブIDがあるかどうかを確認したい場合。以下のスクリプトを参照してください。
#!/usr/bin/perl
use strict;
my $job_id = $ENV{JOB_ID};
if ($job_id > 0) {
print "Is and SGE job";
} else {
print "Is NOT and SGE job";
}
于 2012-08-30T16:32:58.357 に答える
0
あなたはこのようなことを試すことができます:
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の場合、SGEexecデーモンによって開始されました。使用しているGridEngineのバージョンによっては、名前が異なる場合があります。
于 2011-08-31T05:10:28.557 に答える