Perl 教程 之 Perl 进程管理 4

简介: Perl教程介绍了进程管理,包括使用$$或$PROCESS_ID获取PID,%ENV存储环境变量,exit()退出子进程,fork()创建新进程。在父进程返回子进程PID,在子进程返回0。fork与exec配合执行命令。示例展示了父进程如何等待子进程结束。当子进程变为僵死状态时,父进程需使用wait或waitpid终止,或设置$SIG{CHLD}为"IGNORE"。

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

目录
相关文章
|
10天前
|
并行计算 安全 Unix
Python教程第8章 | 线程与进程
本章主要讲解了线程与进程的概念,多线程的运用以及Python进程的相关案例学习
612 0
|
Android开发 安全
安卓跨进程通信之Aidl教程详解(一)
安卓多进程通信主要有四大方案:1,Activity 2,Broadcast Receiver 3,Content Prodiver 4,Service 1,Activity Intent intent = new Intent(); intent.
1323 0
|
10天前
|
消息中间件 Linux
Linux进程间通信(IPC)教程 Linux共享内存介绍:介绍POSIX共享内存的基本概念、用途和编程实践
Linux进程间通信(IPC)教程 Linux共享内存介绍:介绍POSIX共享内存的基本概念、用途和编程实践
30 2
|
10天前
|
存储 Linux 程序员
Linux进程间通信(IPC)教程 Linux信号量:讲解POSIX信号量在Linux系统进程间通信中的编程实践
Linux进程间通信(IPC)教程 Linux信号量:讲解POSIX信号量在Linux系统进程间通信中的编程实践
24 1
|
8月前
|
Linux 网络安全
百度搜索:蓝易云【CentOS7查看开放端口命令、查看端口占用情况和开启端口命令、杀掉进程等命令教程。】
请注意,在执行涉及系统配置和进程管理的命令时,确保你有足够的权限。同时,谨慎操作以避免对系统产生不可预见的影响。
397 0
|
10月前
|
缓存 并行计算 算法
Python多线程与多进程教程:全面解析、代码案例与优化技巧
Python多线程与多进程教程:全面解析、代码案例与优化技巧
349 0
|
存储 SQL 缓存
Spring Boot 2.x基础教程:进程内缓存的使用与Cache注解详解
Spring Boot 2.x基础教程:进程内缓存的使用与Cache注解详解
295 0
Spring Boot 2.x基础教程:进程内缓存的使用与Cache注解详解
|
Python 安全 Sentinel

相关实验场景

更多