免费注册 查看新帖 |

Chinaunix

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

子进程中如何获得system执行的PID [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-02-08 15:12 |只看该作者
不就是就system产生的pid大家一起探讨下嘛
另system()里加一句:echo $$ > cmd.pid
这种方法貌似也是错的
arccos2002 发表于 2010-02-08 14:50


不可能错。除非你用错。

论坛徽章:
0
12 [报告]
发表于 2010-02-08 20:52 |只看该作者
没戏
把system 用 fork + exec 代替

论坛徽章:
0
13 [报告]
发表于 2010-02-08 22:14 |只看该作者
非要获取的话也不是不可能,对进程表做一些文本分析。
  1. $ cat system.pl
  2. use strict;

  3. my $pid = fork;

  4. if ($pid) {
  5.    print "system's pid is: ", getpid(),"\n";

  6. } else {
  7.    system "sleep 60";
  8.    exit 0;
  9. }

  10. waitpid($pid, 0);

  11. sub getpid {
  12.    my @proc = `ps -efw|grep $0`;
  13.    my $childid = (split/\s+/,$proc[1])[1];
  14.    @proc = `ps -efw|grep $childid`;
  15.    return (split/\s+/,$proc[1])[1];
  16. }
复制代码
$ perl system.pl
system's pid is: 18859


捕获不到进程表的话另当别论(例如solaris的ps就不及时)。

论坛徽章:
0
14 [报告]
发表于 2010-02-08 22:19 |只看该作者
回复 13# 兰花仙子

哈哈,仙子姐姐的方法真强!

不过貌似使用PID文件的方式更可靠更简单哦!

其实这个问题早告诉LZ了,fork + exec解决就行了,但LZ就是要研究system。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP