perl进程管理

2023-11-08

原文链接:https://www.jc2182.com/perl/perl-process-manager.html

进程管理

  • 您可以按照各种要求使用 Perl 来创建新流程。本教程将列出创建和管理Perl流程的一些重要且最常用的方法。
  • 您可以使用特殊变量$ 或 或 PROCESS_ID来获取当前进程ID。 使用任何上述方法创建的每个进程都使用%ENV变量维护其自己的虚拟环境。
  • exit() 函数总是退出刚子的过程,执行此功能和主要过程作为一个整体将不会退出,除非所有运行的子流程都已经退出。
  • 所有打开的句柄在子进程中都是 dup()-ed,因此在一个进程中关闭任何句柄不会影响其他进程。

backstick 操作符

执行任何Unix命令的最简单方法是使用 backstick 运算符。您只需将命令放入 backstick 运算符中,这将导致命令执行并返回其结果,该结果可以存储如下:

@files = `ls -l`;

foreach $file (@files) {
   print $file;
}

1;

执行以上代码后,它将列出当前目录中可用的所有文件和目录-

drwxr-xr-x 3 root root 4096 Sep 14 06:46 9-14
drwxr-xr-x 4 root root 4096 Sep 13 07:54 android
-rw-r--r-- 1 root root  574 Sep 17 15:16 index.htm
drwxr-xr-x 3  544  401 4096 Jul  6 16:49 MIME-Lite-3.01
-rw-r--r-- 1 root root   71 Sep 17 15:16 test.pl
drwx------ 2 root root 4096 Sep 17 15:11 vAtrJdy

system() 函数

system( "ls -l")

1;

当执行上述代码时,它列出了当前目录中可用的所有文件和目录-

drwxr-xr-x 3 root root 4096 Sep 14 06:46 9-14
drwxr-xr-x 4 root root 4096 Sep 13 07:54 android
-rw-r--r-- 1 root root  574 Sep 17 15:16 index.htm
drwxr-xr-x 3  544  401 4096 Jul  6 16:49 MIME-Lite-3.01
-rw-r--r-- 1 root root   71 Sep 17 15:16 test.pl
drwx------ 2 root root 4096 Sep 17 15:11 vAtrJdy

当命令包含 P A T H 或 PATH或 PATHHOME之类的shell环境变量时,请务必小心。尝试以下三种情况-



$PATH = "I am Perl Variable";

system('echo $PATH');  # Treats $PATH as shell variable
system("echo $PATH");  # Treats $PATH as Perl variable
system("echo \$PATH"); # Escaping $ works.

1;

执行上述代码时,根据shell变量$PATH中的设置,它会产生以下结果。


/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin
I am Perl Variable
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin

fork() 函数

Perl提供了一个fork() 函数,该函数对应于同名的Unix系统调用。在大多数使用fork() 系统调用的类Unix平台上,Perl的fork() 只是对其进行调用。在某些平台(例如Windows)上,不能使用fork() 系统调用,可以构建Perl在解释器级别上模拟fork() 。

fork() 函数用于克隆当前进程。该调用将在同一点创建一个运行相同程序的新进程。它将子pid返回到父进程,将0返回到子进程,如果fork不成功,则返回undef。您可以在进程中使用exec() 函数启动请求的可执行文件,该可执行文件将在单独的进程区域中执行,并且exec() 将等待其完成,然后以与该进程相同的退出状态退出。



if(!defined($pid = fork())) {
   # fork returned undef, so unsuccessful
   die "Cannot fork a child: $!";
} elsif ($pid == 0) {
   print "Printed by child process\n";
   exec("date") || die "can't exec date: $!";
  
} else {
   # fork returned 0 nor undef
   # so this branch is parent
   print "Printed by parent process\n";
   $ret = waitpid($pid, 0);
   print "Completed process id: $ret\n";

}

1;

执行上述代码后,将产生以下结果-

Printed by parent process
Printed by child process
Tue Sep 17 15:41:08 CDT 2013
Completed process id: 17777

可以将wait() 和waitpid() 作为fork() 返回的伪进程ID进行传递。这些调用将适当地等待伪进程的终止并返回其状态。如果使用waitpid() 函数在没有等待孩子的情况下进行分叉,则会堆积僵尸。在Unix系统上,可以通过将$ SIG {CHLD}设置为“ IGNORE”来避免这种情况,如下所示:



local $SIG{CHLD} = "IGNORE";
 
if(!defined($pid = fork())) {
   # fork returned undef, so unsuccessful
   die "Cannot fork a child: $!";
} elsif ($pid == 0) {
   print "Printed by child process\n";
   exec("date") || die "can't exec date: $!";
  
} else {
   # fork returned 0 nor undef
   # so this branch is parent
   print "Printed by parent process\n";
   $ret = waitpid($pid, 0);
   print "Completed process id: $ret\n";

}

1;

执行上述代码后,将产生以下结果-

Printed by parent process
Printed by child process
Tue Sep 17 15:44:07 CDT 2013
Completed process id: -1

kill() 函数

Perl kill(‘KILL’,(Process List))函数可用于通过将fork() 返回的ID传递给伪进程来终止它。

请注意,在伪process() 上使用kill(‘KILL’,(Process List))通常可能导致内存泄漏,因为实现伪进程的线程没有机会清理其资源。

您可以使用kill() 函数将任何其他信号发送到目标进程,例如,下面的命令会将SIGINT发送到进程ID 104和102-

kill('INT', 104, 102);
 
1;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

perl进程管理 的相关文章

随机推荐

  • 运算符之算术运算符、关系运算符、逻辑运算符、复合赋值运算符、其他运算符

    运算符是一种告诉编译器执行特定的数学或逻辑操作的符号 C 有丰富的内置运算符 分类如下 算术运算符 关系运算符 逻辑运算符 复合赋值运算符 位运算符 其他运算符 运算符优先级 由高到低 类别 运算符 结合性 后缀 gt 从左到右 一元 ty
  • python学得好 监狱进的早_蟒周刊-403-监狱中学 Python 改变人生

    200115 Zoom Quiet 大妈 用时 42 分钟 完成快译 200115 Zoom Quiet 大妈 用时 17 分钟 完成格式转抄 Ned was getting reports for a mysterious disk I
  • 铨顺宏RFID:应用超高频RFID技术智能档案管理系统

    根据超高频率RFID技术性智能化档案智能管理系统将改变这一现况 根据选用先 进的超高频率RFID自动检索技术应用和计算机系统技术性 以超高频率RFIDrfid标签做为信息储存媒体并黏贴在档案袋上 在超高频率RFID集成ic中储存该档案的基本
  • 看完这篇 教你玩转渗透测试靶机vulnhub——FunBox2(ROOKIE)

    Vulnhub靶机FunBox2 ROOKIE 渗透测试详解 Vulnhub靶机介绍 Vulnhub靶机下载 Vulnhub靶机安装 Vulnhub靶机漏洞详解 信息收集 FTP匿名访问 暴力破解 SSH私钥登入获取Shell Sudo提权
  • YOLO V4论文解读

    YOLO V4论文解读 一 YOLOV3回顾 二 YOLOV4中 三 Bag of freebies 数据扩充 模拟对象遮挡 结合多幅图像进行数据扩充 解决类别不平衡 label smoothing bbox Yolov4 use 四 Ba
  • java 字符串示例

    概述 最近项目上 需求 需要Android端在一段字符串分包处理 在此做个笔录 1 code public class Main public static void main String args System out println
  • mysql 1786_mysql错误:Statement violates GTID consistency

    在MYSQL中 执行建表语句时CREATE TABLE aaaa AS SELECT FROM menu 报 错误代码 1786 Statement violates GTID consistency CREATE TABLE SELECT
  • 训练loss不下降的原因总结

    表现 训练过程中loss值一直震荡 没有下降趋势 原因一 梯度消失 多因为网络深度过深 接近输入层的参数 梯度过小 解决方法 调整网络 激活函数relu batch normal 残差网络等 原因二 训练数据分布不均匀 这种情况对训练数据s
  • 力扣:350.两个数组的交集 II

    力扣 350 两个数组的交集 II 题目 给你两个整数数组 nums1 和 nums2 请你以数组形式返回两数组的交集 返回结果中每个元素出现的次数 应与元素在两个数组中都出现的次数一致 如果出现次数不一致 则考虑取较小值 可以不考虑输出结
  • 大数据课程I3——Kafka的消息流与索引机制

    文章作者邮箱 yugongshiye sina cn 地址 广东惠州 本章节目的 掌握Kafka的消息流处理 掌握Kafka的索引机制 掌握Kafka的消息系统语义 一 Kafka消息流处理 1 Producer 写入消息 流程说明 1 p
  • yolov5转tensorrt c++

    目录 yolo tensorrt 下载weights模型 onnx tensorrt project 编译问题解决 依赖项 自己生成weights模型 以及加载报错解决 生成引擎报错解决 批量预测 自动创建引擎 解决检测框乱的问题 提速 b
  • 对接微信米大师虚拟支付2.0文档

    话不多说 上代码 支付密钥算法 public static String calcPaySig String uri String postBody String appKey String needSignMsg uri postBody
  • 前端框架之Vue学习(一)

    1 Vue简介 一 vue 是一套用于构建用户界面的渐进式框架 二 Vue的核心特点 1 相应的数据变化 当数据发生改变 gt 视图自动更新 2 组合的视图组件 UI页面映射为组件树 划分组件可维护 可复用 可测试 三 MVC和MVVM M
  • 计算机中丢失ucrtbased.dll

    如果在运行某软件或编译程序时提示缺少 找不到ucrtbased dll等类似提示 在 https cn dll files com ucrtbased dll html 下载 解压 如果您的系统是64位的请将dll文件复制到C Window
  • 火猴之抽奖大转盘(firemonkey)

    活动中往往有抽奖环节 如何使用firemonkey制作一个抽奖的程序呢 效果 思路 1 rectangle line text作为可以转动的转盘和指针以及按钮 2 pie 共 10个作为不同颜色的底 每个startangle和endangl
  • Linux系统离线安装包及其依赖的下载安装

    一 概述 我们在Linux系统下进行项目开发时 经常会出现缺少某些依赖库或者开发包的情况 这时候一般会通过使用apt命令去联网下载 但在某些特殊情况下 例如终端硬件不支持网络连接 周边缺少有线与无线网络 或者需要批量安装程序到很多终端上时
  • Window平台---IPSEC客户端的安装

    1 安装主机证书 参见证书的申请与安装一节 2 从http vpn ebootis de 站点下载 ipsec exe 3 下载windwos2000的ipsec资源工具 http download microsoft com downlo
  • 代码保护软件VMProtect用户手册控制面板“项目”部分都有哪些功能?

    VMProtect是一种很可靠的工具 可以保护应用程序代码免受分析和破解 但只有在应用程序内保护机制正确构建且没有可能破坏整个保护的严重错误的情况下 才能实现最好的效果 下载VMProtect最新试用版 接下来为大家介绍关于VMProtec
  • 移动距离(跳出C++向下取整带来的误区)

    移动举例问题 文章目录 移动举例问题 问题详情 问题分析 跳出误区 代码 问题详情 X星球居民小区的楼房全是一样的 并且按矩阵样式排列 其楼房的编号为 1 2 3 当排满一行时 从下一行相邻的楼往反方向排号 比如 当小区排号宽度为 6时 开
  • perl进程管理

    原文链接 https www jc2182 com perl perl process manager html 进程管理 您可以按照各种要求使用 Perl 来创建新流程 本教程将列出创建和管理Perl流程的一些重要且最常用的方法 您可以使