Regex 获取新流程的PID
所以我用Perl创建了一个流程,如下所示: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
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。你打算怎么用它?