在perl中使用进程名称获取进程的进程id

在perl中使用进程名称获取进程的进程id,perl,array,reference,Perl,Array,Reference,抱歉,这里没有perl\linux 我正在尝试做一些简单的事情,比如用perl查找进程的进程id。在bash中,这似乎是一件相当简单的事情,但是如果您能提供一些帮助,我们将不胜感激 我首先安装了在CPAN上找到的Proc::Find模块,其语法如下 my$pids=find_procname=>“我的应用程序名”; 打印pid=$pids\n 然而,我在这里得到的结果是 pid = ARRAY(0x55f5069e1c98) 因此,我尝试通过执行以下操作来取消对数组的引用 print &quo

抱歉,这里没有perl\linux

我正在尝试做一些简单的事情,比如用perl查找进程的进程id。在bash中,这似乎是一件相当简单的事情,但是如果您能提供一些帮助,我们将不胜感激

我首先安装了在CPAN上找到的Proc::Find模块,其语法如下

my$pids=find_procname=>“我的应用程序名”; 打印pid=$pids\n

然而,我在这里得到的结果是

pid = ARRAY(0x55f5069e1c98)
因此,我尝试通过执行以下操作来取消对数组的引用

print "pid = $pids[0]\n";
但这也没有帮助,因为这不会返回任何结果

接下来我想,我可以从perl运行一些bash命令,看看这是否有效

my$pid=pgrep-f signalapp 打印pid=$pid\n


但是当我运行它时,这只会给我一个编译错误。

Proc::Find::Find\u Proc返回对数组的引用,而不是数组

因此正确的代码应该是:

 my $pids = find_proc(name => 'my-app-name'); 
 foreach my $pid (@$pids) {
     print "pid = $pid\n";
 }
 # or use  
 # print "pid = ". $pids->[0] . "\n"; 
 # or 
 # print "pid = $pids->[0]\n"; 

Proc::Find::Find_Proc返回对数组的引用,而不是数组

因此正确的代码应该是:

 my $pids = find_proc(name => 'my-app-name'); 
 foreach my $pid (@$pids) {
     print "pid = $pid\n";
 }
 # or use  
 # print "pid = ". $pids->[0] . "\n"; 
 # or 
 # print "pid = $pids->[0]\n"; 
第一行:

my $pids = find_proc(name => 'my-app-name');
find_proc函数将数组作为输出返回,但不是直接数组,而是对数组的引用$pid是对数组的引用

@$pid
我们使用以下语法读取对数组的引用

@$pid
这表明我们正在读取一个存储在引用中的数组,因此要从该引用中读取一项,我们需要使用以下语法之一

打印pid=$$pid[0]\n; 或 打印pid=${$pid}[0]\n; 或 打印pid=$pid->[0]\n; 第二行:

print "pid = $pids\n";
要在单独的行中显示每个项目,我们可以修改此行,如下所示

一艘班轮: 打印pid:$\un foreach@$pid; 或: foreach my$item@$pid{ 打印pid:$item\n; } 或: 每小时@$pid{ 打印pid:$\n; } 第一行:

my $pids = find_proc(name => 'my-app-name');
find_proc函数将数组作为输出返回,但不是直接数组,而是对数组的引用$pid是对数组的引用

@$pid
我们使用以下语法读取对数组的引用

@$pid
这表明我们正在读取一个存储在引用中的数组,因此要从该引用中读取一项,我们需要使用以下语法之一

打印pid=$$pid[0]\n; 或 打印pid=${$pid}[0]\n; 或 打印pid=$pid->[0]\n; 第二行:

print "pid = $pids\n";
要在单独的行中显示每个项目,我们可以修改此行,如下所示

一艘班轮: 打印pid:$\un foreach@$pid; 或: foreach my$item@$pid{ 打印pid:$item\n; } 或: 每小时@$pid{ 打印pid:$\n; }
$pids是一个arrayref。请看这里,因此我尝试通过执行以下操作来取消对数组的引用,这不会取消对引用的引用,strict也会告诉您这么多。始终严格使用;使用警告;或同等产品!是的,谢谢。从现在起,我将默认使用strict和warnings。我将这些添加到perl脚本中,以了解我将获得什么样的指导,它确实告诉我缺少global@pids。全局符号@pids需要显式包名您忘记声明我的@pids了吗?在./sendsignal.pl第9行,$pids是一个arrayref。请看这里,因此我尝试通过执行以下操作来取消对数组的引用,这不会取消对引用的引用,strict也会告诉您这么多。始终严格使用;使用警告;或同等产品!是的,谢谢。从现在起,我将默认使用strict和warnings。我将这些添加到perl脚本中,以了解我将获得什么样的指导,它确实告诉我缺少global@pids。全局符号@pids需要显式包名您忘记声明我的@pids了吗?在./sendsignal.pl第9行。