1.Perl 进程管理
Perl 中你可以以不同的方法来创建进程。
本教程将讨论一些进程的管理方法。
你可以使用特殊变量 $$ 或 $PROCESS_ID 来获取进程 ID。
%ENV 哈希存放了父进程,也就是shell中的环境变量,在Perl中可以修改这些变量。
exit() 通常用于退出子进程,主进程在子进程全部退出后再退出。
所有打开的句柄会在子程序中被 dup() 函数复制, 所有关闭进程所有句柄不会影响其他进程 。

2.反引号运算符
使用反引号运算符可以很容易的执行 Unix 命令。你可以在反引号中插入一些简单的命令。命令执行后将返回结果:
#!/usr/bin/perl
@files = `ls -l`;
foreach $file (@files){
print $file;
}
1;

3.system() 函数
你也可以使用 system() 函数执行 Unix 命令, 执行该命令将直接输出结果。
默认情况下会送到目前Perl的STDOUT指向的地方,一般是屏幕。
你也可以使用重定向运算符 > 输出到指定文件:
你需要注意命令包含环境变量如 $PATH 或 $HOME 的输出结果,如下所示:
#!/usr/bin/perl
$PATH = "我是 Perl 的变量";
system('echo $PATH'); # $PATH 作为 shell 环境变量
system("echo $PATH"); # $PATH 作为 Perl 的变量
system("echo \$PATH"); # 转义 $
1;

4.fork() 函数
Perl fork() 函数用于创建一个新进程。
在父进程中返回子进程的PID,在子进程中返回0。如果发生错误(比如,内存不足)返回undef,并将$!设为对应的错误信息。
fork 可以和 exec 配合使用。exec 函数执行完引号中的命令后进程即结束。
#!/usr/bin/perl
if(!defined($pid = fork())) {
# fork 发生错误返回 undef
die "无法创建子进程: $!";
}elsif ($pid == 0) {
print "通过子进程输出\n";
exec("date") || die "无法输出日期: $!";
} else {
# 在父进程中
print "通过父进程输出\n";
$ret = waitpid($pid, 0);
print "完成的进程ID: $ret\n";
}
1;
如果进程退出时,会向父进程发送一个CHLD的信号后,就会变成僵死的进程,需要父进程使用wait和waitpid来终止。当然,也可以设置$SIG{CHLD}为IGNORG:
#!/usr/bin/perl
local $SIG{CHLD} = "IGNORE";
if(!defined($pid = fork())) {
# fork 发生错误返回 undef
die "无法创建子进程: $!";
}elsif ($pid == 0) {
print "通过子进程输出\n";
exec("date") || die "无法输出日期: $!";
} else {
# 在父进程中
print "通过父进程输出\n";
$ret = waitpid($pid, 0);
print "完成的进程ID: $ret\n";
}
1;

5.Kill 函数
Perl kill('signal', (Process List))给一组进程发送信号。signal是发送的数字信号,9为杀掉进程。
首先看看linux中的常用信号,见如下列表:
信号名 值 标注 解释
HUP 1 A 检测到挂起
INT 2 A 来自键盘的中断
QUIT 3 A 来自键盘的停止
ILL 4 A 非法指令
ABRT 6 C 失败
FPE 8 C 浮点异常
KILL 9 AF 终端信号
USR1 10 A 用户定义的信号1
SEGV 11 C 非法内存访问
USR2 12 A 用户定义的信号2
PIPE 13 A 写往没有读取者的管道
ALRM 14 A 来自闹钟的定时器信号
TERM 15 A 终端信号
CHLD 17 B 子进程终止
CONT 18 E 如果被停止则继续
STOP 19 DF 停止进程
TSTP 20 D tty键入的停止命令
TTIN 21 D 对后台进程的tty输入
TTOU 22 D 对后台进程的tty输出

以下实例向进程 104 和 102 发送 SIGINT 信号:
#!/usr/bin/perl
kill('INT', 104, 102);
1;

27-Perl 进程管理的更多相关文章

  1. perl进程管理一例

    #!/usr/bin/perl -w use strict; use warnings; use DBI; #### # 这里进行服务器任务管理 ## #字符串映射函数 our %actions = ...

  2. perl学习之进程管理

    系统函数 == 最简单的系统调用  system "date"; # Perl会将 date 命令传递给unix的shell并获取返回值和error信息等   == 带有系统参数的 ...

  3. RHEL7进程管理

    进程概念 名称 说明 程序 一组指令的集合 进程 程序的执行就是进程也可以把进程看成一个独立的程序在内存中有其对应的代码空间和数据空间,一个进程所拥有的数据和代码只属于自己进程是资源分配的基本单位,也 ...

  4. SUPERVISOR进程管理器配置指南

    SUPERVISOR进程管理器配置指南1. supervisor简介1.1. 官网http://supervisord.org/ 1.2. 介绍Supervisor是一个进程控制系统. 它是一个C/S ...

  5. kernel笔记——内核编译与进程管理

    内核与操作系统 由于一些商业操作系统设计上的缺陷以及日益庞杂,“操作系统”的概念对很多人而言变得含糊不清.在进一步讨论Linux内核的话题前,我们先区分“内核”与“操作系统”这两个概念. 操作系统:指 ...

  6. Linux进程管理 (2)CFS调度器

    关键词: 目录: Linux进程管理 (1)进程的诞生 Linux进程管理 (2)CFS调度器 Linux进程管理 (3)SMP负载均衡 Linux进程管理 (4)HMP调度器 Linux进程管理 ( ...

  7. Supervisor (进程管理利器) 使用说明 - 运维笔记

    一.Supervisor简单介绍supervisor是一个 Client/Server模式的系统,允许用户在类unix操作系统上监视和控制多个进程,或者可以说是多个程序.supervisor与laun ...

  8. 2013337朱荟潼 Linux第三章读书笔记——进程管理

    第三章 进程管理 总结 fork创造的子进程复制了父进程资源,包括内存及进程描述符的内容,资源的复制而不是指针的复制. vfork的行为更像一个线程(指没有自已独立的内存空间),更明显的是vfork的 ...

  9. linux之进程管理详解

    |-进程管理        进程常用命令        |- w查看当前系统信息        |- ps进程查看命令        |- kill终止进程        |- 一个存放内存中的特殊目 ...

随机推荐

  1. 简述python中的@staticmethod作用及用法

    关于@staticmethod,这里抛开修饰器的概念不谈,只简单谈它的作用和用法. staticmethod用于修饰类中的方法,使其可以在不创建类实例的情况下调用方法,这样做的好处是执行效率比较高.当 ...

  2. js动态往对象里边添加一项

    第一种方法let obj ={"name":"tom","age":16}let key = "id";let valu ...

  3. oracle口令文件在windows和linux系统下的命名和位置

      分类: Oracle 1.windows系统下 oracle口令文件在:$ORACLE_HOME/database目录下: 命名规则为:PWD$SID.ora   2.linux系统下 oracl ...

  4. P2341 [HAOI2006]受欢迎的牛(更完)

    P2341 [HAOI2006]受欢迎的牛 题解 tarjan 缩点板子题 如果 A 稀饭 B,那就 A 向 B 连边,构造出一个有向图 如果这个有向图里有强连通分量,也就说明这个强连通分量里的所有奶 ...

  5. Android-Glide使用

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Li_Qing_Xue/article/details/78919499 图片加载很是重要,我也对比过 ...

  6. Mac下安装brew

    1.Mac 终端下,执行以下命令,即可安装brew: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Hom ...

  7. [go]结构体/接口

    接口惯用操作: 结构体构造方法返回接口类型 //定义服务器接口 type IServer interface{ Start() Stop() Serve() } type Server struct ...

  8. SSM框架—Spring AOP之基于注解的声明式AspectJ(Demo)

    项目结构 XML <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http ...

  9. 【转载】oracle中decode函数用法

    1.DECODE的语法:DECODE(value,if1,then1,if2,then2,if3,then3,...,else).表示假设value 等于if1时,DECODE函数的结果返回then1 ...

  10. java数据机构之自定义栈

    一.栈的特点 1.线性数据结构 2.后进先出 二.使用数组来实现栈 //使用数组来实现栈 public class MyArrayStack<E> { //保存数据 private Obj ...