子进程(在分叉后创建)当从 windows ssh 到 linux 机器一段时间后卡在 windows

Child Process (created after forking) when ssh to linux machine from windows getting stuck on windows after sometime

下面显示的代码片段的工作方式是,在分叉后,子进程 ssh 从 windows 到 Linux 机器,运行 script1_bkt.csh 在 linux 机器。并且日志被转储到 windows 路径 ($AngleLogFilePath\Angle_${date}.log === V:\ricky_angle_testing_63.1\depot\vfr.10\main\logs\angleLogsrickyPersonal\Angle_${日期}.log).

父进程(trialSet.pl 和 trialSetDepWint.pl)运行 在前台,工作正常。

V:是 /dv/lmv/mentor/

的网络文件管理器或 CISF

问题::

从 windows 机器和 运行s script1_bkt.csh ssh 到 Linux 机器的子进程(在 fork 进程之后)在某些时候卡住(不是每次) .

注意点:在Linux机器上(qwelnx45),script1_bkt.csh的PID没有' 在一段时间后存在,这意味着该过程已完成。但是,在 windows 上存在 ssh.exe 的 PID(使用它在 windows 上触发 script1_bkt.csh),这意味着在 windows 上,命令($GoToUnix74 cd $ ClientAltRoot/lkg ; source script1_bkt.csh ) 未完成,卡住了。该脚本通常需要 3 小时才能完成,但有时它会因为卡住而永远无法完成。 ::: 这个脚本每次都不卡

还有一点很重要:当子进程卡在windows时,虽然script1_bkt.csh在Linux完成,日志文件($AngleLogFilePath\Angle_$ {date}.log) 没有 script1_bkt.csh 给出的所有数据,即日志文件不完整(似乎是因为进程卡住了,它停止写入日志文件)

代码片段:

use File::Path qw( make_path );

my $ClientAltRoot           = "/dv/lmv/mentor/ricky_angle_testing_63.1/depot/vfr/63.10/main/";
my $GoToUnix              = "C:\cygwin\bin\ssh.exe qwelnx45";
my $AngleLogFilePath    = "V:\ricky_angle_testing_63.1\depot\vfr\63.10\main\logs\angleLogsrickyPersonal";
my $date                    = strftime("%Y%m%d_%H%M%S", localtime(time));

make_path("$AngleLogFilePath") or warn  "Failed to create dir $AngleLogFilePath";

my $aqpid;
# fork angle process
if ($aqpid = fork()) {
    $SIG{CHLD} = 'DEFAULT';
} elsif (defined ($aqpid)) { 
    sleep 10;

    print "Angle child started\n";
    $angleReturnStatus = system ("$GoToUnix cd $ClientAltRoot/lkg ; source script1_bkt.csh > $AngleLogFilePath\Angle_${date}.log ");
    $angleFailed += 1 if ($angleReturnStatus > 0);
    exit 0; 
}

print "##### Starting the foreground script ###### \n";
system "$GoToUnix \"cd /home/ricky/; echo abc ;  /home/ricky/trialSet.pl > setTrial_ricky/set_${date}.log\"  ";
print "Ended SetDep\n";     

print "Waiting as child process has not ended";
1 while (wait() != -1);

system ( "perl C:\ricky\Testing\trialSetDepWint.pl ");
print "Demo script ended\n";

请问进程卡住的原因是什么?消除这个卡住问题的可能解决方案是什么?

-提前致谢。

实际上,问题是由于以下原因造成的:

  1. 快速模式已开启。 ## 作为解决方案,我关闭了系统上的快速模式。
  2. 中断 run/script 正在进行的命令提示符。 ## 避免在 run/script 进行时使用机器。 因为,当你在机器上工作时,你会随意切换命令提示符;由于这种切换,您的 运行 有时会卡住,直到您按下“ENTER”或任意键。

我按照这两种方法,现在没有看到问题。

谢谢。