获取新进程的PID

时间:2013-09-01 19:40:40

标签: regex perl background-process pid

所以我在Perl中创建一个这样的过程:

my $process = `nohup ./run > /dev/null 2>&1 &`;

返回

的内容
[1] 2905

如何从中获取进程ID,以便稍后在脚本执行中我可以运行以下内容:

exec("kill -9 $pid");

这是我到目前为止所得到的:

/\[1\] ([0-9]+)/g

但它看起来很乱,有没有办法改进这个正则表达式?那个正则表达式总能工作吗?有什么情况下它不会[1]

2 个答案:

答案 0 :(得分:1)

怎么样

@ar  = split(/\s+/, $process);
$pid = $ar[1];

答案 1 :(得分:0)

你应该在这里使用“fork and exec”模式。

if (my $pid = fork()) {
  # You're in the parent process
  # $pid contains the PID of the new child process
  ...
} else {
  # You're in the new child process
  # exec() your new command
  exec($cmd);
  # Execution never gets here
}

编辑:实际上,鉴于您基本上是在这里创建一个守护进程,或许您应该改为Proc::Daemon