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

前言:我在使用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

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

  1. python任意输入一个正整数、判断该数是否为素数_Python编程判断一个正整数是否为素数的方法,python素数...

    Python编程判断一个正整数是否为素数的方法,python素数 本文实例讲述了Python编程判断一个正整数是否为素数的方法.分享给大家供大家参考,具体如下: import string impor ...

  2. python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法

    python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法 目录

  3. 【编程题目】编程判断俩个链表是否相交 ☆

    第 7 题(链表) 微软亚院之编程判断俩个链表是否相交 给出俩个单向链表的头指针,比如 h1,h2,判断这俩个链表是否相交. 为了简化问题,我们假设俩个链表均不带环. 问题扩展: 1.如果链表可能有环 ...

  4. c语言中判断输入是否为数字_C语言编程判断回文数

    大家好,我是阿汤哥,前两天在公众号后台收到一个朋友问回文数,今天我们就来谈谈怎么用C语言编程判断一个数是不是回文数. 怎么判断回文数? 首先看定义,什么是回文数. 回文数 定义: 设n是一任意自然数. ...

  5. 安卓查看php文件是否存在,Android_Android编程判断SD卡是否存在及使用容量查询实现方法,本文实例讲述了Android编程判断 - phpStudy...

    Android编程判断SD卡是否存在及使用容量查询实现方法 本文实例讲述了Android编程判断SD卡是否存在及使用容量查询实现方法.分享给大家供大家参考,具体如下: 1.判断SD卡是否存在 返回tr ...

  6. python任意输入一个正整数、判断该数是否为素数_Python编程判断一个正整数是否为素数的方法...

    本文实例讲述了Python编程判断一个正整数是否为素数的方法.分享给大家供大家参考,具体如下: import string import math #判断是否素数的函数 def isPrime(n): ...

  7. solaris perl print不输出_IC设计中的perl编程

    IC设计中最常用的脚本语言就是perl了,perl以其强大的文字处理能力,使得程序员可以充分地从复制粘贴以及各种搜索替换的工作中解放出来.这里例举了几个perl在IC设计中的实际运用: (1)批量例化 ...

  8. python求一年的第几天_Python编程判断这天是这一年第几天的方法示例

    本文实例讲述了Python编程判断这天是这一年第几天的方法.分享给大家供大家参考,具体如下: 题目:输入某年某月某日,判断这一天是这一年的第几天? 实现代码: year=int(input('请输入年 ...

  9. C语言程序练习题:从键盘任意输入一个字符,编程判断该字符是数字字符、英文字母、空格还是其他字符。

    从键盘任意输入一个字符, 编程判断该字符是数字字符.英文字母.空格还是其他字符. **输入格式要求:提示信息:"Press a key and then press Enter:" ...

最新文章

  1. arm7汇编中怎么使用c中的变量_MDK-ARM armasm汇编器——内建变量和常量.pdf
  2. R语言基于自定义函数构建xgboost模型并使用LIME解释器进行模型预测结果解释:基于训练数据以及模型构建LIME解释器解释多个iris数据样本的预测结果、使用LIME解释器进行模型预测结果解释
  3. 网站推广方法众多,对此你了解多少?
  4. 多媒体广告的底线在哪里
  5. 安装最新Spree出现error:spree_core requires will_paginate (= 3.0.pre2, runtime)
  6. 高性能key-value数据库
  7. 云服务器配置出现的问题 2
  8. c语言值传递 地址传递 引用传递参数,C++参数传递(值传递,引用传递)
  9. 1964年诞生的第一代电子计算机,世界第一台电子计算机诞生的年份是?
  10. django-urls.py路由分发
  11. 闲话WPF之十三(WPF中的资源)
  12. 编写一个Applet在屏幕上画一组同心圆
  13. fir.im Weekly - 2016 开年技术干货分享
  14. 数值分析matlab实验报告,数值分析第一次作业matlab实验报告.doc
  15. C#_自动化测试3_controll IE
  16. ETL设计详解(数据抽取、清洗与转换)
  17. 企业成本核算程序是怎样?一般采用什么方法
  18. 小学英语语法口诀巧记大全,简单实用!
  19. Java Lempel-Ziv
  20. 数据结构(2)时间复杂度——渐进时间复杂度、渐进上界、渐进下界

热门文章

  1. cad菜单栏快捷键_拒绝效率低下,教你瞬间提升10倍!老师傅珍藏多年CAD快捷键...
  2. Java项目:(前端vue后台java微服务)在线考试系统(java+vue+springboot+mysql+maven)
  3. iOS 模糊效果相关
  4. UIView Animation
  5. 制作 Swift 和 Objective-C Mixed 的 Pod
  6. python的基本知识点
  7. android采用MVP完整漫画APP、钉钉地图效果、功能完善的音乐播放器、仿QQ动态登录效果、触手app主页等源码...
  8. mysql数据库常用命令
  9. 预计2020年传感器需求超一万亿个
  10. ionic + cordova+angularJs 搭建的H5 App完整版总结