Regex 获取新流程的PID

Regex 获取新流程的PID,regex,perl,background-process,pid,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

所以我用Perl创建了一个流程,如下所示:

my $process = `nohup ./run > /dev/null 2>&1 &`;
它返回的东西沿着

[1] 2905
如何从中获取进程ID,以便稍后在脚本执行过程中运行类似的操作:

exec("kill -9 $pid");
以下是到目前为止我得到的信息:

/\[1\] ([0-9]+)/g
但是它看起来很混乱,有什么方法可以改进这个正则表达式吗?这个正则表达式总是有效的吗?有没有任何情况下它不会是
[1]

怎么样

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

您可能应该在这里使用“fork和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
}

编辑:事实上,鉴于您基本上是在这里创建一个守护进程,也许您应该改为查看。

我想这会管用的,谢谢!如果没有更好的答案,我会在5分钟内接受。测试后,我将其更新为两行,因为我无法使原来的一行正常工作。我也遇到了一些问题。谢谢。看起来“`”无法捕获输出。你知道为什么吗?backtick操作符捕获并返回程序STDOUT。你打算怎么用它?