`
weihe6666
  • 浏览: 439255 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Perl-进程管理

阅读更多
Perl-进程管理


1.system函数

在perl中,启动子进程最简单的方法是用system函数。

1.1 简单命令

例如要从perl调用Unix的date命令,需要启用如下代码:
  
     system "date";

这回创建一个子进程来运行date命令,并且它继承了perl的标准输入,标准输出和标准出错。这意味着date通常输出的日期时间字符串并会送到目前perl的STDOUT指向的地方。

1.2 复杂命令

比较复杂的命令要放在参数里:

比如:

    system 'ls -l $HOME';

请注意这里的 $HOME是shell变量,所以用的不是双引号,而是单引号。否则,因为美元符号也是perl进行变量内插的符号,所以shell看不到它。

2 exec函数

到目前为止,我们提到的system所有的语法都适用于exec函数,当然有一个例外,system函数会创建子进程,子进程会在perl休眠时执行任务。而exec函数却导致perl进程自己去执行任务。这类似于子程序调用与goto的差别。

比如:
  exec "bedchock", "-o","args1",@ARGV;

当运行到exec操作符时,perl会找到bedchock程序并且“跳进去”执行,就不会再有perl进程了,只有那个bedchock进程。

一旦启动要执行的程序,Perl便会自动放手退出,因此exec调用之后写的代码都不发运行,除非在编程接管启动过程中的错误:

exec "date";
die "date could't run:$!";。

3.用反引号捕获输出结果

无论用system还是exec,被调用程序的输出都会定向到Perl的标准输出。有时候我们感兴趣就在于捕获输出的字符串,并进一步处理。这其实只要以魔力反引号来代替单引号和双引号。

   open DATE, "date|" or die "cannot pipe from date: $!";
   my $now = `date`;
   print "The time is $now";

当我们把date放在反引号里时,Perl会执行这个命令并将其标准输出结果一字符串的形式捕获。在这个例子中,字符串会赋给$now。

4.将进程视为文件句柄

到目前为止,我们看到的方法都是由Perl同步控制子程序:启动一个命令,然后等着它结束或许还会捕获其结果输出。但是perl其实也可以启动一个异步运行的子程序,并和他保持通信,直到子程序结束为止。

例如:
open DATE "date|" or die "cannot pipe from date:$!";
my $now = <DATE>;
print "The time is now $now";


上面的例子,竖线在命令的右边,表示该命令执行时他的标准输出会转向只读文件句柄DATE。

为什么要用文件句柄的方式和进程打交道呢,假如要根据计算结果来决定写到其它进程的数据,这是唯一简单做法。可是如果只想读取,反引号通常是易于使用。然而如果子进程不时有数据要送往父进程,就必须用管道了。

open F,"find / -atime +90 size +1000 -print |" or die "fork:$!";
while(<F>){
chomp;
printf "%s size %dK last accessed on %s\n", $_, (1023 + -s $_)/1024, -A $_;
}


find命令这次运行是要查找那些90天内未被存取过的1000块以上的大文件,他们非常适合被鬼党委永久性介质中。在find工作的时候,Perl会等待。没找到一个文件,perl会立刻收到文件名并进一步显示文件的相关信息工分析。如果我们用反引号的话,就得等到find彻底搜完才能看到第一行输出。从任务监控角度来说,往往看到执行的最新进展才能让人放心。
分享到:
评论

相关推荐

    strawberry-perl-5.32.1.1-64bit

    Strawberry Perl是Perl语言在Windows操作系统上的一个流行的开源实现,尤其受到开发者和系统管理员的欢迎。这个"strawberry-perl-5.32.1.1-64bit"压缩包是针对64位系统的,这意味着它设计用于运行在64位版本的...

    mod_perl-2.0-current.tar.gz

    标题中的"mod_perl-2.0-current.tar.gz"是一个开源软件包的名称,它代表了mod_perl的2.0版本的一个当前开发版本。...同时,了解如何正确安装、配置和管理mod_perl对于Web开发者和系统管理员来说是非常重要的技能。

    Perl开发环境.zip

    Perl是一种强大的、跨平台的脚本编程语言,广泛用于文本处理、系统管理、网络编程以及Web开发等多个领域。"Perl开发环境.zip" 提供的是在Windows操作系统上搭建Perl开发环境的资源,具体是"strawberry-perl-5.32.0.1...

    SNMP离线下载包,适用于Centos8的系统

    1. `perl-interpreter-5.26.3-420.el8.x86_64.rpm`:这是Perl解释器的RPM包,Perl是编写SNMP管理工具和脚本的常用语言。 2. `perl-libs-5.26.3-420.el8.x86_64.rpm`:Perl运行库,是Perl解释器运行时所需的库文件。 ...

    Note of Learning Perl--Process Management

    因此,编写跨平台的Perl进程管理代码时,可能需要使用条件编译或者模块如`Win32::Process`来实现兼容性。 总的来说,Perl的进程管理功能强大且灵活,通过合理使用这些工具,我们可以构建出复杂、高效的应用程序,...

    perl-5.8.9 源代码

    此外,Perl的源代码中还有大量的内置模块,如文件操作、网络通信、进程控制等,这些都是Perl强大功能的基础。通过阅读这些模块的源代码,开发者可以学习到如何编写高效的Perl模块,同时也能了解到各种系统接口的调用...

    manager及perl依赖centos7版.zip

    综上所述,这个压缩包包含了一系列用于构建和维护管理软件的Perl模块,特别是与数据库管理和监控(如MHA)、日志记录、邮件通知、进程管理以及配置处理相关的功能。在CentOS 7环境中部署这个manager软件时,首先需要...

    Perl-Tutorial

    Perl在处理文本、系统管理、网络编程、数据库接口等方面表现出色,尤其在Web开发和脚本编写中广泛应用。 **Perl的特点** 1. **文本处理**: Perl拥有强大的字符串处理功能,包括正则表达式,使得对文本数据的搜索、...

    perl-alien-sqlite:Perl Alien软件包来编译sqlite

    Perl Alien模块是Perl编程语言中一个特殊的工具,用于管理和封装外部C库,使得Perl程序员能够直接在Perl脚本中调用这些库的功能。在本例中,`perl-alien-sqlite`是针对SQLite数据库的一个Alien包。SQLite是一个轻量...

    perl-www-easy:基于mod_perl的极简主义Web框架

    此外,Perl-www-easy可能还包括错误处理机制,以及一些辅助工具,如会话管理、中间件支持等。中间件可以用于执行通用的任务,如认证、日志记录、缓存控制等,它们可以在请求处理链中插入,提高代码复用性。 在实际...

    centos6 mysql 离线安装缺少的rpm包 libaio+numactl+perl

    3. **perl**:Perl是一种高级编程语言,广泛用于系统管理、文本处理和网络编程。在MySQL的安装过程中,perl可能被用作脚本语言,处理配置文件、检查系统环境或者执行一些自动化任务。 对于离线安装,你需要提前下载...

    manager及perl依赖centos6版.zip

    综上所述,这个压缩包是一个包含了Manager监控节点的安装程序以及一系列Perl依赖库的集合,这些库包括日志记录、邮件发送、配置管理以及进程管理等关键功能,它们一起确保了在CentOS 6系统上能够顺利地部署和运行...

    DBI-1.631.tar.gz

    - **事务管理**:支持开始、提交和回滚事务,确保数据的一致性。 2. **驱动器(Drivers)**: - DBI的核心功能是抽象数据库接口,而具体的数据库交互则由驱动器完成。例如,DBD::mysql是用于MySQL的驱动,DBD::...

    perl-toolkit:Perl示例脚本

    Perl提供了Thread、Parallel::ForkManager等模块来支持多进程或多线程编程,提高程序性能。 在"perl-toolkit-master"这个压缩包中,你可能会找到以上所有领域的示例代码,它们可以帮助你深入理解Perl在实际问题解决...

    perl-App-SQLiteUtils:(无描述)

    2. **SQLite**: SQLite 是一个开源的关系型数据库管理系统,它嵌入到应用程序中,不需要单独的服务器进程。SQLite 数据库文件是自包含的,可以在不同的操作系统之间移动,非常适用于轻量级或嵌入式应用。 3. **...

    使用Perl实现系统管理自动化(第二版)

    - **进程监控**: Perl还允许开发人员监控运行中的进程状态,如PID管理、CPU和内存使用情况监测等。这有助于识别系统瓶颈或异常行为,从而及时采取措施解决问题。 #### 三、处理XML和YAML等格式的配置文件 - **XML...

    perl-scripts:有用的Perl脚本和代码片段

    Perl是一种强大的、灵活的脚本编程语言,尤其在文本处理和系统管理方面有着广泛的应用。"perl-scripts:有用的Perl脚本和代码片段"这个资源集合了一些实用的Perl脚本,对于初学者和经验丰富的开发者来说,都是很好的...

    在Perl下编写CGI程序的扩展模块

    然而,需要注意的是,由于CGI程序通常在每个请求上启动一个新的进程,这可能导致服务器性能瓶颈。因此,在高并发场景下,开发者可能会考虑使用更高效的解决方案,如FastCGI或者 PSGI (Perl Server Gateway Interface...

Global site tag (gtag.js) - Google Analytics