如何获取UNIX命令的进程ID我在Perl脚本中触发?

时间:2014-08-22 11:00:24

标签: perl unix

我在Perl脚本中触发UNIX命令。

我需要UNIX命令的进程ID。

例如,如果我在UNIX命令下触发:

# padv -s adv.cfg > adv.out &
[1] 4550

我的进程ID是4550。

# ps -ef | grep padv
root      4550  2810  0 16:28 pts/5    00:00:00 padv -s adv.cfg
root      4639  2810  0 16:29 pts/5    00:00:00 grep padv

如何在Perl脚本中捕获该进程ID?

例如,我在Perl脚本中触发我的命令,如下所示:

#!/usr/bin/perl

use strict;
use warnings;

qx(padv -s adv.cfg > adv.out &);

2 个答案:

答案 0 :(得分:4)

您可以使用open()

  

Open在成功时返回非零值,否则返回未定义的值。如果open涉及管道,则返回值恰好是子进程的pid。

my $pid = open(my $ph, "-|", "padv -s adv.cfg > adv.out") or die $!;

$ph文件句柄而不是输出重定向读取输出:

my $pid = open(my $ph, "-|", "padv -s adv.cfg") or die $!;

答案 1 :(得分:3)

致电fork以创建子流程。子进程的进程ID将返回到父进程。然后子进程可以调用exec来执行您想要的程序。