Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Perl system()、exec()以及与LSF的交互_Linux_Perl_Lsf - Fatal编程技术网

Linux Perl system()、exec()以及与LSF的交互

Linux Perl system()、exec()以及与LSF的交互,linux,perl,lsf,Linux,Perl,Lsf,我有一个脚本,必须启动两个独立的进程,并等待其中一个进程完成后才能继续 到目前为止,我已经通过创建一个进程来运行它,如果fork pid==0,exec,else wait。另一个是使用system和命令行创建的 现在我准备推出这个脚本,在(LSF)上运行400次这样的工作对过程迭代,不过我关心的是稳定性。我知道这些过程可能会崩溃。在这种情况下,我需要一个方法来知道进程何时崩溃,并杀死它的成对进程和主脚本 最初,我编写了一个有3分钟观察周期的看门狗,如果3分钟的不活动时间过去了,它就会终止进程。

我有一个脚本,必须启动两个独立的进程,并等待其中一个进程完成后才能继续

到目前为止,我已经通过创建一个进程来运行它,如果fork pid==0,exec,else wait。另一个是使用
system
和命令行创建的

现在我准备推出这个脚本,在(LSF)上运行400次这样的工作对过程迭代,不过我关心的是稳定性。我知道这些过程可能会崩溃。在这种情况下,我需要一个方法来知道进程何时崩溃,并杀死它的成对进程和主脚本

最初,我编写了一个有3分钟观察周期的看门狗,如果3分钟的不活动时间过去了,它就会终止进程。然而,这捕获了很多误报,因为当LSF暂停两个进程中的一个时,看门狗将它们视为不活动的

在LSF中,当我发布作业时,我可以选择杀死它们。然而,当我杀死一份工作时,我到底要杀死什么?kill是否会删除Perl脚本创建的两个进程?还是让他们变成僵尸

重申,

  • 终止LSF队列上的作业是否也会终止该作业创建的每个进程

  • 从Perl脚本生成两个独立进程并等待其中一个进程退出再继续的最佳(最安全的)方法是什么

  • 如何编写一个看门狗来区分崩溃的进程和LSF管理员挂起的进程


监视器应该是创建子进程的监视器。(它也可以启动“主脚本”。
wait
将在它们崩溃时告诉您

my %children;

my $pid1 = fork();
if (!defined($pid1)) { ... }
if ($pid1) { ... }
++$children{$pid1};

my $pid2 = fork();
if (!defined($pid2)) { ... }
if ($pid2) { ... }
++$children{$pid2};

while (keys(%children)) {
   my $pid = wait();
   next if !$children{$pid};  # !!!

   delete($children{$pid});

   if ($? & 0x7F) { ... }   # Killed from signal
   if ($? >> 8) { ... }     # Returned an error
}

LSF如何暂停/恢复?我想这是通过
SIGSTOP
SIGCONT
?“默认操作是向作业发送以下信号:SIGTSTP用于并行或交互式作业。SIGTSTP被主进程捕获并传递给其他主机上运行的所有从进程。SIGSTOP用于顺序作业。SIGSTOP无法被用户程序捕获。可以使用lsf.conf中的LSB_SIGSTOP参数从lsf的“作业控制”配置SIGSTOP信号。我想知道“从进程”的含义是什么“在这种情况下,指的是由原始作业生成的流程,那么您的想法是重组脚本?因此,您有一个脚本调用主脚本,并且还创建了两个子进程,它使用wait on来捕获返回值,并查看它是错误还是被信号杀死?是的。主脚本可以继承到子脚本的管道。此外,您可能不知道
setsid(2)
(可通过
POSIX::setsid()
获得)。创建一个可以向其发送信号的进程组。非常感谢,这看起来是向前推进的最佳方式!