假设我有一个 perl 脚本,它一直在后台运行,比如说 run.pl 我如何通过调用它来与这个脚本进行交互?如:perl run.pl -reload , perl run.pl -reset
有可能做到吗?如果是,我应该学习哪个模块?
非常感谢!
假设我有一个 perl 脚本,它一直在后台运行,比如说 run.pl 我如何通过调用它来与这个脚本进行交互?如:perl run.pl -reload , perl run.pl -reset
有可能做到吗?如果是,我应该学习哪个模块?
非常感谢!
IPC ( perldoc perlipc
)可以通过多种方法完成:
我认为最简单的方法是在脚本中处理信号 HUP,在收到信号后,读取一些文件以获取更多信息。当然,您必须在发送信号之前编写此文件。
操作系统中有多种进程间通信方法(在 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
更多关于学习 Perl中的信号的信息,第 16.8 章发送和接收信号。
操作系统中可用的信号不多(最多 64 个),可用于自己目的的信号更少。
如果您需要更强大的功能,请使用套接字或消息传递系统,例如ZeroMQ。
由于您的 perl 脚本在后台运行,您可以直接与其交互。但是,解决方法很少: