免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: redmaple_v1
打印 上一主题 下一主题

求助:用perl语言怎么获取进程pid号? [复制链接]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
21 [报告]
发表于 2009-03-03 16:36 |只看该作者
原帖由 redmaple_v1 于 2009-3-3 16:14 发表



我用ps -ef 查看的时候,pid号不对!

哦,那是你看岔了或者你根本不清楚哪个是哪个。

其实验证 getppid 的输出对不对很简单,在 fork 之前打印 $$,然后在 child process 中打印 getppid 的结果。

[ 本帖最后由 MMMIX 于 2009-3-3 16:37 编辑 ]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
22 [报告]
发表于 2009-03-03 16:42 |只看该作者
原帖由 redmaple_v1 于 2009-3-3 16:20 发表


谢谢,能否帖个链接?我没找到

search.cpan.org

BTW,要学会用搜索引擎。

论坛徽章:
0
23 [报告]
发表于 2009-03-03 17:05 |只看该作者
原帖由 MMMIX 于 2009-3-3 16:36 发表

哦,那是你看岔了或者你根本不清楚哪个是哪个。

其实验证 getppid 的输出对不对很简单,在 fork 之前打印 $$,然后在 child process 中打印 getppid 的结果。


#!/usr/bin/perl -w

use strict;
print "\n\ntest$$\n\n";
my $pid;
$pid=fork();
die "Error!\n" unless defined $pid;
my $a;
my $sipp = "./sipp local:5000 -mp 60001 -bg";
if ($pid!=0){
   system ("$sipp");
}
else{
   $a = getppid();
   print "$a\n";
}

结果:
test18712 #$$打印出来的进程pid
18712 #父进程pid
Resolving remote host '127.0.0.1'... Done.
Background mode - PID=[18715]  #$sipp运行实际pid

[ 本帖最后由 redmaple_v1 于 2009-3-3 17:06 编辑 ]

论坛徽章:
0
24 [报告]
发表于 2009-03-03 17:09 |只看该作者
原帖由 MMMIX 于 2009-3-3 16:42 发表

search.cpan.org

BTW,要学会用搜索引擎。

,额这个都搞忘了!!:wink:

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
25 [报告]
发表于 2009-03-03 18:30 |只看该作者
原帖由 redmaple_v1 于 2009-3-3 17:05 发表
#!/usr/bin/perl -w

use strict;
print "\n\ntest$$\n\n";
my $pid;
$pid=fork();
die "Error!\n" unless defined $pid;
my $a;
my $sipp = "./sipp local:5000 -mp 60001 -bg";
if ($pid!=0){
   system ("$sipp");
}
else{
   $a = getppid();
   print "$a\n";
}  

结果:
test18712 #$$打印出来的进程pid
18712 #父进程pid
Resolving remote host '127.0.0.1'... Done.
Background mode - PID=[18715]  #$sipp运行实际pid

你贴这段上来想说明什么?你没有搞错?那最后 print "$a\n" 的输出呢?

如果你觉得运行 sipp 的 pid 应该和 getpid 的输出或者和最开始 $$ 的值相等,那显然你还不理解 system 的作用。

[ 本帖最后由 MMMIX 于 2009-3-3 18:33 编辑 ]

论坛徽章:
0
26 [报告]
发表于 2009-03-03 18:57 |只看该作者
my $pid = `ps ax | grep $pname | grep -v grep | awk {'print \$1'}`

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
27 [报告]
发表于 2009-03-03 20:52 |只看该作者
原帖由 Pro_sky 于 2009-3-3 18:57 发表
my $pid = `ps ax | grep $pname | grep -v grep | awk {'print \$1'}`

你这样还不如
my $pid = `pidof $name`
呢。
唉。

论坛徽章:
0
28 [报告]
发表于 2009-03-04 14:28 |只看该作者

答谢

问题已经解决了,只不过换了个方式。通过从文档读出来的方法把pid获得。
通过这次提问,我学到了很多,谢谢大家的耐心指导。
小弟谢过了!!

[ 本帖最后由 redmaple_v1 于 2009-3-4 14:30 编辑 ]

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
29 [报告]
发表于 2009-03-04 15:51 |只看该作者
原帖由 MMMIX 于 2009-3-3 16:35 发表

直接用 Perl 的 kill 函数。


看来perl的推广还须加强。

已经看到过好多人在perl脚本里写了一堆的``和system
就连文本处理也是用的 `sed ...`

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
30 [报告]
发表于 2009-03-04 17:18 |只看该作者
原帖由 ly5066113 于 2009-3-4 15:51 发表

已经看到过好多人在perl脚本里写了一堆的``和system
就连文本处理也是用的 `sed ...`

他们就是把 Perl 当 Shell 使,还有把 Perl 当 C 使的,等等等等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP