Perl 教程 之 Perl 进程管理 4

简介: Perl教程介绍了如何进行进程管理,包括使用$$或$PROCESS_ID获取进程ID,通过%ENV访问环境变量,exit()退出子进程。fork()函数创建新进程,返回值在父、子进程中不同,常与exec配合。当子进程结束,它会发送CHLD信号给父进程,需用wait或waitpid处理僵死进程,或者设置$SIG{CHLD}为"IGNORE"。示例代码展示了fork和exec的用法,以及处理子进程的方法。

Perl 教程 之 Perl 进程管理 4

Perl 进程管理

Perl 中可以以不同的方法来创建进程。

可以使用特殊变量 $$ 或 $PROCESS_ID 来获取进程 ID。

%ENV 哈希存放了父进程,也就是shell中的环境变量,在Perl中可以修改这些变量。

exit() 通常用于退出子进程,主进程在子进程全部退出后再退出。

所有打开的句柄会在子程序中被 dup() 函数复制, 所有关闭进程所有句柄不会影响其他进程 。

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;

执行以上程序,输出结果如下:

通过父进程输出
通过子进程输出
2016年 6月19日 星期日 22时21分14秒 CST
完成的进程ID: 47117

如果进程退出时,会向父进程发送一个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;
执行以上程序,输出结果如下:

通过父进程输出
通过子进程输出
2016年 6月19日 星期日 22时30分56秒 CST
完成的进程ID: -1

目录
相关文章
|
Ubuntu Shell 网络安全
安装了ubuntu虚拟机后发现shell无法连接 ubuntu开启ssh连接
【8月更文挑战第23天】安装了ubuntu虚拟机后发现shell无法连接
1454 6
|
存储 关系型数据库 MySQL
第8章 MySQL的数据目录
第8章 MySQL的数据目录
309 0
|
存储 NoSQL 关系型数据库
轻松打卡:使用Spring Boot和Redis Bitmap构建高效签到系统【redis实战 四】
轻松打卡:使用Spring Boot和Redis Bitmap构建高效签到系统【redis实战 四】
842 0
|
SQL 安全 数据库连接
解决Exception in thread “main“ com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications
解决Exception in thread “main“ com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications
解决Exception in thread “main“ com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications
|
云安全 存储 关系型数据库
|
存储 开发者 iOS开发
|
3天前
|
数据采集 人工智能 安全
|
12天前
|
云安全 监控 安全