如何在perl脚本运行时读取该选项?

时间:2012-07-30 08:05:29

标签: perl

假设我有一个perl脚本,它继续在后台运行,比如run.pl 如何通过自己调用此脚本进行交互? 例如:perl run.pl -reload,perl run.pl -reset

有可能吗? 如果是,我应该学习哪个模块?

非常感谢!

3 个答案:

答案 0 :(得分:2)

IPC (perldoc perlipc)可以通过各种方法完成:

  1. 使用套接字
  2. 使用信号
  3. 使用共享内存
  4. 我认为最简单的方法是在脚本中处理signal HUP,并在收到信号后,读取一些文件以获取更多信息。当然,您必须在发送信号之前写入此文件。

答案 1 :(得分:1)

操作系统中有多种进程间通信方法(在Linux / Unix的情况下,这是管道,FIFO,信号,共享内存和其他几种)。 Perl支持所有这些。

我认为,您的任务的最佳解决方案是使用信号。

所以你可以拦截Perl中的信号:

sub INT_handler {
    print("Don't Interrupt!\n");
}

$SIG{'INT'} = 'INT_handler';

所以你可以发信号:

kill  9     => $pid;                    # send $pid a signal 9
kill -1     => $pgrp;                   # send whole job a signal 1
kill  USR1  => $$;                      # send myself a SIGUSR1
kill  HUP   => @pids;                   # send a SIGHUP to processes in @pids

有关Learning Perl中信号的更多信息,第16.8章发送和接收信号

操作系统中可用的信号不多(最多64个),并且您可以为自己的目的使用的信号更少。

如果您需要更强大的功能,请使用套接字或消息传递系统,如ZeroMQ

答案 2 :(得分:0)

由于你的perl脚本在后台运行,你可以直接与它进行交互。但是,解决方法很少:

  1. 文件。您可以使用文件作为某些操作的触发器。想象一下 你有一个run.pl副本在后台运行,它不断 检查文件/ tmp / file的存在。如果脚本不存在 只是继续检查,如果它是 - 你的脚本 想。如果您的命令“perl run.pl -reload”将创建此命令 文件,你将实现你想要的。
  2. 信号。您可以向流程发送信号。如何使用 perl脚本中的信号请参见here