0

与えられた kill.pl:

$SIG{INT} = sub { print "int\n" };
$SIG{TERM} = sub { print "term\n" };
$SIG{ABRT} = sub { print "abort\n" };

print "sleeping...\n";
sleep 60;

そして kill.com:

$ perl kill.pl

そして、次のように起動+中止します:

submit /log_file=kill.log kill.com

delete /entry=XXXXXX/noconfirm

シグナル ハンドラは呼び出されません。プロセスが強制終了されると、Linux でも同様のコードが機能します。

kill.log は次のように表示されます:

(19:58)$ perl kill.pl
sleeping...
%JBC-F-JOBABORT, job aborted during execution

vmsperl のドキュメントを読み、http://perldoc.perl.org/sigtrap.htmlからいくつかのことを試しました。これを行う方法はありますか?

私が電話した場合:

@kill.com

CTRL+C を実行すると、SIGINT は kill.pl によって処理されます。

私が興味を持っている可能性のあるすべてのシグナルをトラップするように perl に指示する方法があるかどうかを誰かが知っている場合に備えて、perl タグを追加しました。私の試みは次のとおりです。

$SIG{$_} = \&subroutine for keys(%SIG);
4

2 に答える 2

1

プロセスにシグナルを送信しているわけではありません。キュー マネージャーにプロセスを削除するように指示しているためです。あなたがやりたいことをする最も簡単な方法は、Perlを使ってシグナルを送ることだと思います。前と同じようにジョブを送信し、次を使用します。

$ show system/batch

ジョブの pid を検索します。キュー マネージャーが 572 のエントリを割り当てた場合、次のように表示されます。

  Pid    Process Name    State  Pri      I/O       CPU       Page flts  Pages
00003EA1 BATCH_572       HIB      1      259   0 00:00:00.05       511    626  B

次のように信号を pid 0x3ea1 に送信します。ジョブの通知は、中止されたのではなく、完了したことを示していることに注意してください。

$ perl -e "kill 'ABRT', 0x3ea1;"
$

Job KILL (queue SYS$BATCH, entry 572) completed

ログ ファイルを確認すると、最後に次の 2 行が表示されます。

sleeping...
abort
于 2013-03-19T16:18:13.590 に答える
0

これは VAX または Alpha システムですか? あなたの「削除」呼び出しは、実行中のジョブに中止信号を投げていない可能性があります。使用してから時間が経ちましたが、特定のシグナルをバッチ ジョブにスローするツールを思い出せません。LIB$SIGNAL はプロセスではなく、プロセスから移動しました。sigtrap doc の「error-signals」リストから残りのシグナルをトラップしてみてください。

于 2013-03-01T06:09:11.787 に答える