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

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

概述前言:我在使用perl编写CGI程序时遇到的一些问题,解决以后,记录一下我的心得,有心的朋友们会从中得到帮助并养成正确使用的好习惯。 perl编程中判断系统进程是否存活的方法尽量使用perl自己的语句,而不是使用system函数来调用,除非对system语句非常了解,否则会出现很多意想不到的问题。 举例:我们检测pptpd进程是否还活着 #!/usr/bin/perl -w use strict;

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

总结

以上是内存溢出为你收集整理的perl 编程 - 判断系统进程是否活着的方法全部内容,希望文章能够帮你解决perl 编程 - 判断系统进程是否活着的方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1274789.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存