【问题标题】:My perl script needs to wait until the another script finishes its job我的 perl 脚本需要等到另一个脚本完成它的工作
【发布时间】:2014-05-08 11:37:51
【问题描述】:

我是脚本语言的新手,我想问一个简单的问题。

#!/usr/bin/perl

my $process_id = shift;
execute();

sub execute() {
  system("cd", "bin");
  my $output = `pcp.sh -p $process_id`;
  if (index($output, "some string") != -1) {
    print("Information 1.0 :Standalone server works fine \n");
  }
  else {
    print("Information 2.0 Standalone server have some problems)\n");
  }
}

对于“pcp.sh”,请点击链接:

http://www.oracle.com/technetwork/systems/security/pcp-149863.txt

此脚本在终端上运行并返回

Information 1.0 Standalone server works fine

但我正在做脚本监控和监控工具获取输出作为返回值。 (这很奇怪。)在我运行脚本时在监控工具上显示

Information 2.0 Standalone server have some problems

我需要从pcp.sh 获取输出。该代码的pcp.sh -p $process_id 部分运行了大约一分钟。监控工具可能会运行五秒钟。我明白我必须等待,但我不知道如何处理这份工作。

【问题讨论】:

  • 在命令完成之前,反引号不会返回。您在反引号返回后看到的任何输出都不是来自您启动的程序,而是来自它在后台启动的程序。 Perl 对此一无所知。怎么可能?连你自己都不知道。
  • 你的“system()”调用有什么意义? “abs(1.0)”的意义何在?
  • 系统调用只是从$home目录进入bin目录,其他的不需要我删除了。
  • 请注意,system("cd", "bin"); 什么都不做。它试图执行一个名为cd 的程序,但没有这样的程序,所以它返回-1 并相应地设置$!。有一个名为 cd 的内置 shell,但如果您设法让 shell 运行它,那只会更改该 shell 的工作目录。你想要 Perl 内置 chdir

标签: perl shell unix hyperic


【解决方案1】:

尝试使用 Perl 调试器来解决它。它很容易使用,只需运行:

perl -d yourscript

它会启动。然后你可以使用以下命令:

n - 运行下一条语句

l - 列出 perl 脚本

p var - 打印一些变量

s - 进入一个函数(而不是执行整个函数)

b 16 - 在第 16 行设置断点

r - 运行到下一个断点或结束

q - 退出

【讨论】:

  • 没有工作的问题没有执行。我的其他脚本 pcp.sh 必须完全执行,但即使终端正确执行,工具也不会像这样执行
  • oracle.com/technetwork/systems/security/pcp-149863.txt 在该链接中给出了用于查找 Solaris 中相关的开放 TCP 端口和 PID。
猜你喜欢
  • 2019-10-19
  • 2013-07-03
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多