当前位置: 首页 > 编程日记 > 正文

perl 编程 - 判断系统进程是否活着的方法

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

前言:我在使用perl编写CGI程序时遇到的一些问题,解决以后,记录一下我的心得,有心的朋友们会从中得到帮助并养成正确使用的好习惯。

perl编程中判断系统进程是否存活的方法尽量使用perl自己的语句,而不是使用system函数来调用,除非对system语句非常了解,否则会出现很多意想不到的问题。

举例:我们检测pptpd进程是否还活着

#!/usr/bin/perl -w

use strict;

my $pptpd_stat = `ps -ef|grep pptpd|grep -v grep`;
chomp $pptpd_stat;
if ( $pptpd_stat eq '' ) {
    open ( DATA,">/var/www/cgi-bin/vpn/pptpd.tmp" );
        print DATA "pptpd is die";
    close DATA;
}else {
    open ( DATA,">/var/www/cgi-bin/vpn/pptpd.tmp" );
        print DATA "pptpd is alive";
    close DATA;
}
system "cat pptpd.tmp";

结束

提示:假如使用perl写CGI程序,而CGI程序的属主是apache,这里判断pptpd进程的时候应该使用的正确的命令应该是ps -ef|grep pptpd|grep -v grep。之前我在调试程序时百思不得其解,原来是这里的原因,引以为戒。

找到这个问题的方法是,my $pptpd_stat = `ps -ef|grep pptpd|grep -v grep > /tmp/sss`;然后查看/tmp/sss

apache   11670 11668  0 15:07 ?        00:00:00 grep pptpd

就明白问题的原因了,把命令语句输出到/tmp目录下是一个很好的调试方法,利用/tmp目录的特殊性。

经验:使用ps判断进程的时候,千万不要这样写ps -ef|grep pptpd|grep -v root,过滤掉用户来清除干扰的方法不是一个好方法,因为你的perl程序很可能是在其他身份下执行的比如apache,而ps -ef|grep pptpd|grep -v apache又会过滤掉所有,所以最好的习惯是ps -ef|grep pptpd|grep -v grep。^_^

注意:perl在调用system函数的时候,system函数中直接获取shell语句的$?返回值时,千万别忘了所有的$符号都要使用转义符,否则返回值可能不是你想要的结果。比如下面的语句

system函数中的两条shell语句在shell中执行结果是相同的,但是在perl程序中,执行结果不同。

system "ps -ef|grep pptpd|grep -v root;echo $?";    错误语句
system "ps -ef|grep pptpd|grep -v root;echo \$?";    正确语句
system "ps -ef|grep pptpd|grep -v root;status=\$?;echo \$status";    正确语句

说明:经过实验system函数执行后可以输出shell命令的执行结果,但这个结果不能赋予变量,赋予变量的话可以使用反引号,因为system函数在perl中以子进程执行,执行结果直接输出,赋予变量的话只能返回shell语句是否执行成功的值,成功标准也遵守shell的评判标准而不是perl的标准,即0成功1失败。


转载于:https://my.oschina.net/lionel45/blog/361932

相关文章:

2009 Competition Highlights by ICPC Live

2009 Competition Highlights by ICPC Live Links:http://www.youtube.com/watch?vn0oZRcAz6w0 转载于:https://www.cnblogs.com/yewei/archive/2012/09/07/2674862.html

C4D灯光照明技术学习教程

C4D的灯光照明技术 大小解压后:4.8G 学会用Redshift点亮3D场景,像专业人士一样塑造光线 灯光在任何空间都是至关重要的,无论是真实的还是虚拟的。它能够传递某种感觉或情感。平面设计师罗伯托冈萨雷斯观察到如此重要的方面,并将其…

Java学习总结:40(国际化)

国际化 所谓国际化程序指的是同一套程序代码可以在不同的国家使用,可以根据其应用的国家自动在项目中显示出本国的相应文字信息。 使用Locale类定义语言环境 Locale类的常用方法 No.方法类型描述1public Locale(String language,String country)构造设置使用的语…

AFNetWorking 队列请求

我们在开发过程中,经常会遇到有些页面不止一个网络请求,有时候需要两个三个甚至更多,这个时候我们就需要队列请求,下边是GET请求的多个请求放在队列里边: [objc] view plaincopyprint? NSURL *url [NSURL URLWithStr…

Hadoop-虚拟机环境准备

传送门:https://app.yinxiang.com/fx/4fdf4d09-ddc8-4c67-8bf7-cca1c913fce5

WCF实现RESTFul Web Service

共同学习了前面一些概念,终于开始正题了哈。RESTful的Web Service调用直观,返回的内容容易解析。这里先会描述一个简单的场景--Web Service提供一个方法来搜索个人信息,传入人名,返回完整个人信息。下面我们一步步用WCF实现一个RE…

VS QT插件

支持用VS编译qt工程 QT下载页:http://qt-project.org/downloads qt-vs-addin插件: http://download.qt-project.org/official_releases/vsaddin/qt-vs-addin-1.2.2-opensource.exe 转载于:https://www.cnblogs.com/Leo-Forest/p/3507017.html

使用AutoCAD 2021创建真实世界的土木设计项目

由工程组织创建|最后更新日期:2021年9月 时长:7h 24m | 7节| 64节讲座|视频:1280720,44 KHz | 大小解压后3 GB 流派:电子学习|语言:英语中英文字幕(根据原英文字幕机译更准确) 学会快速使用AutoCAD ;专业地制作真实世…

Java学习总结:41(文件操作类:File)

Java文件操作类:File 在java.io包中,如果要进行文件自身的操作(例如:创建、删除等),只能依靠java.io.File类完成。 File类的常用操作方法 No.方法类型描述1public File(String pathname)构造传递完整文件操作路径2public File(F…

关于大型网站技术演进的思考(四)-存储的瓶颈4

如果数据库需要进行水平拆分,这其实是一件很开心的事情,因为它代表公司的业务正在迅猛的增长,对于开发人员而言那就是有不尽的项目可以做,虽然会感觉很忙,但是人过的充实,心里也踏实。 数据库水平拆分简单说…

2022-2028年中国环卫行业产业链深度调研及投资前景预测报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国环卫行业市场行业相关概述、中国环卫行业市场行业运行环境、分析了中国环卫行业市场行业的…

curl命令具体解释

对于windows用户假设用Cygwin模拟unix环境的话,里面没有带curl命令,要自己装,所以建议用Gow来模拟,它已经自带了curl工具,安装后直接在cmd环境中用curl命令就可,由于路径已经自己主动给你配置好了。 linux …

如何修改配置以修复ThinkPad 小红帽滚轮失效?

本人使用ThinkPad X1 Carbon超级本,由于近期安装了遨游浏览器(Maxthon),发现其总体体验还是不错,但是在本机器上有个明显的Bug:就是小红帽的滚轮不管用。 由于就查了网上相关资料并加以试验,最终得以解决,方…

在虚幻引擎5中重塑火箭联盟——口袋联盟

流派:电子学习| MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz 语言:英语中英文字幕(根据原英文字幕机译更准确) |大小解压后:3.28 GB |时长:4h 21m 了解如何实现火箭联盟般的力学,并在短时间内创建最近的火箭…

Java学习总结:42(字节流和字符流)

字节流与字符流 上一节我们学习了文件操作类File,但是File类虽然可以操作文件,但是却不能操作文件的内容。如果要进行文件内容的操作,就必须依靠流的概念来完成。流在实际中分为输入流和输出流两种,输入流和输出流是一种相对的概…

用C#钩子写一个改键外挂

我的微信群——软件开发测试工程师交流群,欢迎扫码: 改键是一种习惯,比如在玩儿lol或者dota的时候。理论上玩儿什么游戏都可以改键。 做一个窗体(点击Install——应用改键,点击Uninstall——撤销应用)&…

Spring中WebApplicationContext

ApplicationContext是Spring的核心,Context我们通常解释为上下文环境,我想用“容器”来表述它更容易理解一 些,ApplicationContext则是“应用的容器”了:P,Spring把Bean放在这个容器中,在需要的时候,用getB…

洛谷 P1966 火柴排队

题意 给定2个等长序列a、b,要求通过交换使 \[\sum_{i1}^{n}(a_i-b_i)^2\] 最小。 分析 看着这个式子,我突然想到了方差。很明显,方差反应数据的波动程度,所以让数据集中就可以使方差变小了。而对应到这个公式,大方向就…

Revit结构2021-2022从零到精通

流派:电子学习| MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz 语言:英语中英文字幕(根据原英文字幕机译更准确) |大小解压后:8.6 GB 含课程文件 |时长:14h 46m 涵盖Revit结构2021-2022的基本、中级和高级功能 Revit Str…

BZOJ1922: [Sdoi2010]大陆争霸

题目:http://www.lydsy.com/JudgeOnline/problem.php?id1922 带限制最短路。 每个点真正的dis是max(dis[i],dis[v]),v是其保护点。 可以把题目中的保护转化为每个点的贡献。 每次扫一边连出的边做最短路把rd为0的点加入队列。 再扫一遍自己的贡献,更新它…

Java学习总结:43(转换流)

转换流 字节流和字符流的转换可以通过InputStreamReader、OutputStreamWriter两个类转换,下面是这两个类的继承结构和构造方法 名称定义构造构造方法InputStreamReaderpublic class InputStreamReader extends Readerpublic InputStreamReader(InputStream in)Out…

2022-2028年中国环保服务业投资分析及前景预测报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国环保服务行业市场行业相关概述、中国环保服务行业市场行业运行环境、分析了中国环保服务行…

一个build.xml实例

<?xml version"1.0"?> <project name"ssh" basedir"." default"usage"> <property name"name" value"ssh"/> <property name"war.dir" value"war"/> &l…

Spring Boot 2.0 常见问题总结(一)

SpringBoot2.x 依赖环境和版本新特性说明 依赖版本 jdk8 以上, Springboot2.x 用 JDK8 , 因为底层是 Spring framework5 。jar 包方式运行 SpringBoot 项目时问题 打包成jar包&#xff0c;需要增加maven依赖。 <build><plugins><plugin><groupId>org.s…

UE4场景设计学习教程

视频:MPEG4视频(H264) 19201080 25fps 1400kbps |音频:AAC 44100Hz立体声128kbps 语言&#xff1a;西班牙语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; |时长:35节课(6小时36分钟) 文件大小:4.7 GB 学会使用这个强大的软件的工具&#xff0c;一步一步地创造…

Java学习总结:44(文件复制案例)

案例&#xff1a;文件复制(针对InputStream和OutputStream的操作应用) 流程图(比较复杂我就不敲了&#xff0c;直接拍出来) 例&#xff1a;实现文件复制操作 package Project.Study.FileCopyCase;import java.io.*;public class Test {public static void main(String[]args…

java多态的理解

Java中多态性的实现 什么是多态 面向对象的三大特性&#xff1a;封装、继承、多态。从一定角度来看&#xff0c;封装和继承几乎都是为多态而准备的。这是我们最后一个概念&#xff0c;也是最重要的知识点。多态的定义&#xff1a;指允许不同类的对象对同一消息做出响应。即同一…

2022-2028年中国高密度聚乙烯(HDPE)行业市场发展调研及投资前景分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国高密度聚乙烯(HDPE)行业市场行业相关概述、中国高密度聚乙烯(HDPE)行业市场行业运行环境、…

计算机视觉图像处理机器学习压缩感知等论文代码大全

点击链接进入相关博文 1.来自西弗吉利亚大学li xin整理的CV代码合集 主要包括&#xff1a; 1.图像去噪&#xff0c;编码&#xff0c;去马赛克&#xff0c;超分辨&#xff0c;分割&#xff0c;去模糊&#xff0c;纹理合成&#xff0c;修复&#xff0c;质量评估等 2.视频编码和目…

Java 17 VS Java 8: 新旧对决,这些Java 17新特性你不容错过

Java是一门非常流行的编程语言,由于其跨平台性、可移植性以及强大的面向对象特性而备受青睐。Java最初由Sun Microsystems公司于1995年推出,随着时间的推移,Java发展迅速,版本不断更新。本篇博客将重点介绍Java 17与Java 8的对比,以及Java 17的新特性。